在实际编程中发现:
1, 先弹出一个AfxMessageBox,使用全局的,它为模态的。
2, 再创建一个非模态对话框,假设为Dialog1。
3, 当Dialog1关闭时,AfxMessageBox变为非模态的。
最后总结了两种情况:
1, 先弹出AfxMessageBox,后创建非模态对话框。
2, 先创建非模态对话框,后弹出AfxMessageBox。
这两种情况在非模态对话框关闭时,AfxMessageBox都变为非模态的。
试验了几种修改方法,但仍然有问题:
第一种解决方法:
针对上述第一种情况,先查找到AfxMessageBox的窗口句柄,然后转换成CWnd对象,作为指向当前窗口对象的指针。
代码如下:
1, AfxMessageBox的窗口标题与主程序的工程名相同。
2, EnumWindows查找窗口句柄。
3, FromHandle将句柄转换成对象指针。
4, 创建非模态对话框,Create( 对话框ID, 窗口对象指针 )。
此方法只解决了第一种情况,第二种情况没有解决。
其他解决方法:
使用MessageBox替代AfxMessageBox, 如果先弹出非模态对话框,那么MessageBox以该非模态对话框为父窗口,此方法也没解决第二种情况。
总结一下:
最后的解决办法是,创建非模态对话框时Create函数第二个参数为桌面的窗口对象。不使用与主程序相关的窗口对象,这样上面的两种情况都解决了。