聚焦多个对话框(MFC)

时间:2014-07-02 08:41:09

标签: mfc

我遇到一个问题,即在应用程序主框架窗口中的子对话框上单击(任意位置)会导致一个消息框,其中显示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在此消息框前跳跃?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以将消息从线程发布到Dialog1,以便Dialog1可以显示MessageBox而不是显示MessageBox的线程。

如果需要显示MessageBox时可能存在/可能不存在Dialog1,那么如果Dialog1不存在,您可能会有一种机制,MainWindow将处理该消息。