我们有一个对话框X
,它可以被不同的线程(也是主线程)打开为模态。多个模态 X
对话框,同时来自不同线程是可能的。
如果主窗口处理SC_CLOSE
消息,我们想关闭所有X
(仅X
)模态对话框。
问题是;在主窗口中,我们如何在收到 SC_CLOSE
消息时关闭所有模态 X
对话框?只有 X
!所以,PostQuitMessage
没有帮助,因为它关闭了整个应用程序,我们不想关闭应用程序,如果其他模式对话框如 Y, Z ...
是打开。
信息:主窗口可以处理 SC_CLOSE
消息,当我们从主线程也从其他线程打开模态 X
对话框时。并且 X
没有子模态窗口。
最佳答案
我目前的解决方案是;
所有模态 X
对话框在打开期间都已注册到一个集合中(线程安全)。
如果主窗口变为 SC_CLOSE
消息,则现在可以迭代所有对话框。然后对每个对话框使用这两行中的一行。
::PostMessage(pDlg->GetSafeHwnd(), WM_COMMAND, IDOK, 0); //end dialog with idok
::PostMessage(pDlg->GetSafeHwnd(), WM_CLOSE, 0, 0); //or, close dialog
我知道这不是最好的解决方案,但希望对某人有所帮助。
不要尝试遍历主窗口的所有子窗口来查找对话框。它不会帮助。对话框的所有者,并不意味着它是对话框的父级。
关于c++ - MFC,如何从主窗口关闭模态对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41804675/