我遇到一个问题,即在应用程序主框架窗口中的子对话框上单击(任意位置)会导致一个消息框,其中显示NULL父级,可见,隐藏在主窗口后面。
比方说,我们有以下Z顺序(假设零是最顶层):
MainWindow = 2,Dialog1 = 1,MessageBox = 0
当我点击Dialog1时,它会将MainWindow带到MessageBox前面,所以我们最终得到:
MessageBox = 2,MainWindow = 1,Dialog1 = 0
但这些都是错误消息(来自不同的线程),我不希望用户确认一个然后可能忽略另一个因为它被埋没了。
一些关键点:
在收到MainWindow的用户定义消息时,使用DoModal()(未覆盖)显示Dialog1。
MessageBox从单独的线程中显示。它的父窗口是NULL。我无法将其设置为MainWindow的父级,因为当MainWindow等待来自首先触发错误的函数的响应时会发生错误,这会导致死锁。这种死锁情况在这种情况下并非如此,但我不能从创建消息框的线程中假设这种情况。
我尝试将MB_APPLMODAL添加到消息框样式,但它没有帮助。我不想让它成为最顶级的 - 这只会让人烦恼。
实际上是否有办法阻止MainWindow在此消息框前跳跃?
感谢您的帮助。
答案 0 :(得分:0)
您可以将消息从线程发布到Dialog1,以便Dialog1可以显示MessageBox而不是显示MessageBox的线程。
如果需要显示MessageBox时可能存在/可能不存在Dialog1,那么如果Dialog1不存在,您可能会有一种机制,MainWindow将处理该消息。