Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
так и не понял в чем дело, пересоздал диалог, кнопки ок и кэнсел оставил только и сделал невидимыми и всё заработало.
так и не понял с чем это связано.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)