MFC,如何关闭主窗口中的模态对话框?

时间:2017-01-23 10:54:49

标签: c++ multithreading winapi mfc

我们有一个对话框X,可以通过不同的线程(也就是主线程)作为模态打开。可以从不同的线程同时使用多个模态X对话框。

如果主窗口处理X消息,我们希望关闭所有X(仅SC_CLOSE)模式对话框。

问题是;在主窗口中,当它收到X消息时,如何关闭所有模态SC_CLOSE对话框?只有1个}}!因此,X没有帮助,因为它会关闭整个应用,如果打开PostQuitMessage等其他模态对话框,我们也不想关闭应用。

信息:当我们从主线程也从其他线程获得打开的模态Y, Z ...对话框时,主窗口可以处理SC_CLOSE消息。并且X没有子模态窗口。

1 个答案:

答案 0 :(得分:3)

我目前的解决方案是;

在打开它们期间,所有模态X对话框都已在集合中(线程安全地)注册。 如果主窗口变为SC_CLOSE - 消息,则现在可以迭代所有对话框。然后对每个对话框使用这两行中的一行。

  ::PostMessage(pDlg->GetSafeHwnd(), WM_COMMAND, IDOK, 0); //end dialog with idok
  ::PostMessage(pDlg->GetSafeHwnd(), WM_CLOSE, 0, 0);      //or, close dialog

我知道这不是最佳解决方案,但希望可以帮助某人。

请勿尝试迭代主窗口的所有子节点以查找对话框。它没有帮助。对话框的所有者,并不意味着它是对话框的父级。