MessageBox, возвращающийся сразу после вызова MFC DoModal () - PullRequest
1 голос
/ 28 декабря 2011

В теме все сказано: у меня проблема, когда MessageBox возвращается немедленно (без отображения чего-либо), если он вызывается после CDialog :: DoModal ().Я пробовал все виды MessageBox: MessageBoxA, MessageBoxW, CWnd :: MessageBox (используя диалог), AfxMessageBox.Ни один не работает, и они сразу возвращают 1.Я попытался сохранить HWND диалога и использовать его в качестве первого параметра.Я попытался передать GetDesktopWindow () в качестве параметра HWND.Я пробовал такие вещи, как MB_YESNO | MB_ICONSTOP.Ничего не помогло.

Я подозреваю, что упускаю что-то действительно очевидное, но из-за жизни я не могу понять, что именно, и я искал решение более 2 часов.Я попытался создать новый проект с помощью мастера MFC, выбрав шаблон диалога и просто добавив вызов MessageBoxA сразу после вызова DoModal ():

CdelmeDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
MessageBoxA(0, "test", "test", 0);

Диалог отображается просто отлично, но когда я нажимаюОк или Отмена, окно сообщения просто не отображается.

Если я помещаю вызов MessageBoxA () выше вызова DoModal (), он отлично работает.

Редактировать: есть ли способпредотвратить такое поведение?

1 Ответ

2 голосов
/ 28 декабря 2011

из памяти:

Каркас MFC спроектирован таким образом, что если основное окно (в вашем случае dlg) закрывается, циклы сообщений заканчиваются, и больше не будет ничего, что вы могли бы делать в GUI.

Подробнее (от Создателей):

Библиотека классов Microsoft Foundation автоматически прекратит работу Ваш поток, когда окно, на которое ссылается m_pMainWnd, закрыто.

от

http://msdn.microsoft.com/en-us/library/f3ddxzww(v=vs.80).aspx

...