【发布时间】:2012-01-28 20:29:30
【问题描述】:
主题说明了一切:如果在 CDialog::DoModal() 之后调用 MessageBox,则会立即返回(不显示任何内容)。我尝试过各种 MessageBox:MessageBoxA、MessageBoxW、CWnd::MessageBox(通过使用对话框)、AfxMessageBox。没有工作,他们立即返回 1。我尝试保存对话框的 HWND 并将其用作第一个参数。我尝试将 GetDesktopWindow() 作为 HWND 参数传递。我尝试了诸如 MB_YESNO|MB_ICONSTOP 之类的东西。没有任何效果。
我怀疑我遗漏了一些非常明显的东西,但对于我的生活,我无法弄清楚是什么,我一直在寻找一个超过 2 小时的解决方案。我尝试使用 MFC 向导创建一个新项目,选择对话框模板并在 DoModal() 调用之后添加对 MessageBoxA 的调用:
CdelmeDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
MessageBoxA(0, "test", "test", 0);
对话框显示得很好,但是当我单击确定或取消时,消息框根本不显示。
如果我将 MessageBoxA() 调用置于 DoModal() 调用之上,它会完美运行。
编辑:有没有办法防止这种行为?
【问题讨论】:
-
以下内容在您的上下文中有效吗?
MessageBoxA(0, "test", "test", MB_TASKMODAL); -
我已经尝试过了,但没有成功。事实证明,问题是在关闭对话框窗口时线程被 MFC 终止,就像 Daniel Mošmondor 发布的那样。删除将 dlg 分配给 m_pMainWnd 的行解决了我的问题。
标签: mfc modal-dialog messagebox