Когда диалоговое окно MFC скрыто после DoModal, уничтожаются ли его элементы управления? - PullRequest
2 голосов
/ 21 июля 2010

Я использовал диалоги MFC раньше, где вы делаете:

EnterNameDlg dlg;
dlg.DoModal();
string str = dlg.GetName();

Тем не менее, диалог, который у меня сейчас есть, фактически смотрит на элемент управления списком в таком методе, и он не работает. Хотя экземпляр класса явно существует после DoModal(), уничтожается ли фактический диалог? Я заметил, что вызов DoModal() во второй раз приводит к повторному вызову OnInitDialog(), который, кажется, поддерживает эту теорию, диалог воссоздается из шаблона, а не просто становится видимым во второй раз.

Ответы [ 3 ]

3 голосов
/ 21 июля 2010

Да, DoModal создает диалог при каждом вызове и разрушает окно перед возвратом.

Только члены данных по-прежнему будут действительными.Конечно, вы можете добавить больше членов данных в ваш класс EnterNameDlg, если вы хотите собирать данные во время существования диалога.
Как только dlg выйдет из области действия, все будет освобождено.

2 голосов
/ 21 июля 2010

После того, как экземпляр класса DoModal все еще существует, но окно и все его элементы управления уничтожены.Вы можете вызывать только функции, которые не работают с диалоговыми элементами управления после DoModal.Внутри диалогового класса сохраняйте требуемые значения в элементах класса, таких как CString, при нажатии кнопки OK.Эти члены могут быть прочитаны после закрытия диалога.

1 голос
/ 21 июля 2010

Вся MFC построена вокруг неудобного соединения - окна Windows с соответствующим дескриптором и объекта класса MFC. Классы MFC в большинстве случаев рассчитаны на то, чтобы пережить окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...