主题说明了一切:如果在CDialog :: DoModal()之后调用MessageBox,我遇到的问题是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()调用之上,则它可以正常工作。
编辑:有什么方法可以阻止这种行为吗?
答案 0 :(得分:2)
来自记忆:
MFC框架的设计方式是,如果主窗口(在您的情况下为dlg
)退出,则消息循环结束,并且将不再有任何可以按GUI进行的操作。
更多信息(来自创作者):
Microsoft基础类库将自动终止 当m_pMainWnd引用的窗口关闭时,你的线程。
从:
http://msdn.microsoft.com/en-us/library/f3ddxzww(v=vs.80).aspx