我们有一个对话框X
,可以通过不同的线程(也就是主线程)作为模态打开。可以从不同的线程同时使用多个模态X
对话框。
如果主窗口处理X
消息,我们希望关闭所有X
(仅SC_CLOSE
)模式对话框。
问题是;在主窗口中,当它收到X
消息时,如何关闭所有模态SC_CLOSE
对话框?只有1个}}!因此,X
没有帮助,因为它会关闭整个应用,如果打开PostQuitMessage
等其他模态对话框,我们也不想关闭应用。
信息:当我们从主线程也从其他线程获得打开的模态Y, Z ...
对话框时,主窗口可以处理SC_CLOSE
消息。并且X
没有子模态窗口。
答案 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
我知道这不是最佳解决方案,但希望可以帮助某人。
请勿尝试迭代主窗口的所有子节点以查找对话框。它没有帮助。对话框的所有者,并不意味着它是对话框的父级。