在MFC DoModal()调用后立即返回MessageBox

在MFC DoModal()调用后立即返回MessageBox,mfc,modal-dialog,messagebox,Mfc,Modal Dialog,Messagebox,该主题说明了这一切:如果MessageBox在CDialog::DoModal()之后被调用,我遇到了一个问题,MessageBox会立即返回(不显示任何内容)。我尝试过各种MessageBox:MessageBoxA、MessageBoxW、CWnd::MessageBox(通过使用对话框)、AfxMessageBox。没有一个有效,它们会立即返回1。我尝试保存对话框的HWND并将其用作第一个参数。我尝试将GetDesktopWindow()作为HWND参数传递。我试过像MB|YESNO |

该主题说明了这一切:如果MessageBox在CDialog::DoModal()之后被调用,我遇到了一个问题,MessageBox会立即返回(不显示任何内容)。我尝试过各种MessageBox:MessageBoxA、MessageBoxW、CWnd::MessageBox(通过使用对话框)、AfxMessageBox。没有一个有效,它们会立即返回1。我尝试保存对话框的HWND并将其用作第一个参数。我尝试将GetDesktopWindow()作为HWND参数传递。我试过像MB|YESNO | MB|ICONSTOP这样的东西。什么都没用

我怀疑我错过了一些非常明显的东西,但就我的一生而言,我不知道是什么,我一直在寻找一个解决方案,现在已经超过2个小时了。我尝试使用MFC向导创建一个新项目,选择对话框模板,并在DoModal()调用之后添加对MessageBoxA的调用:

对话框显示得很好,但当我单击“确定”或“取消”时,消息框根本不显示

如果我将MessageBoxA()调用放在DoModal()调用之上,那么它工作得非常好

编辑:有没有办法阻止这种行为?

从内存:

MFC框架的设计方式是,如果主窗口(在您的例子中是
dlg
)退出,那么消息循环就结束了,您将不再需要在GUI上执行任何操作

更多信息(来自创建者):

微软基础类库将自动终止 当m_pMainWnd引用的窗口关闭时,您的线程

发件人:


以下内容是否适用于您的环境<代码>MessageBoxA(0,“测试”,“测试”,MB_任务模式)CdelmeDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); MessageBoxA(0, "test", "test", 0);