c++ - MFC,如何从主窗口关闭模态对话框?

标签 c++ multithreading winapi mfc

我们有一个对话框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/

相关文章:

Java线程实际上不是并行执行的吗?

c++ - const char myVar* 与 const char myVar[]

c++ - 有没有办法使用 libxml2 自动检测根标签中写入的命名空间?

java - 如何看待 Java 线程?又名 Thread.stop

ruby-on-rails - Rails 中的多线程 : Circular dependency detected while autoloading constant

c - 从好友那里获得上下控制?

c++ - C++ wchar_t 和 wstrings 的 "wrong"是什么?宽字符有哪些替代方案?

windows - 戈朗 : winapi call with struct parameter

c++ - 在没有窗口的情况下创建 OpenGL 上下文

c++ - 错误的输出 - Ramanujan 对阶乘和 C++ 的近似