| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > DoDataExchange и CDialog::OnInitDialog() |
| Автор: mrgloom 13.11.2012, 11:02 |
| допустим есть главный диалог, по кнопке я вызываю окно. класс окна унаследован от CDialog, вызываю через DoModal(), нажимаю на Ок и вызывается второе окно, класс окна тоже унаследован от CDialog, но там нет кнопок Ок и Cancel, а просто список и по двойному клику по списку ::OnDblclkImageList() в конце я вызываю OnOK(); и предполагаю, что окно закроется. но приложение падает, на трочке DDX_Control(pDX, IDC_LIST_OF_IMAGES, m_ListOfImages); при закрытие окна, я так понимаю туда попадает после строчки OnOK(); .я заметил, что при открытие и закрытии первого окна входит в ::DoDataExchange(CDataExchange* pDX) а при открытие второго- только на выходе и не заходит в CDialog::OnInitDialog() хотя в ::OnInitDialog() от класса заходит. в чем тут может быть проблема? |
| Автор: mrgloom 13.11.2012, 11:49 |
| попробовал убрать вызов первог окна и оставить только второго, пробелма всё равно опявляетс , так что это не проблема взаимодействий 2-х окон. |
| Автор: Albor 13.11.2012, 13:21 |
| Думаю, что причина в том, что диалог уничтожается раньше, чем отрабатывает обработчик DblClick. То есть, сообщение пришло от списка, но в обработчике список уничтожается и на выходе функции его уже нет и DoDataExchange обращается к несуществующему списку. |
| Автор: mrgloom 13.11.2012, 15:13 |
| так и не понял в чем дело, пересоздал диалог, кнопки ок и кэнсел оставил только и сделал невидимыми и всё заработало. так и не понял с чем это связано. |