我们有一个对话框X
,可以由不同的线程(也是主线程)以模式打开该对话框。X
可以同时从不同的线程进行多个模式对话框。
如果主窗口处理消息,我们想关闭所有X
(仅X
)模式对话框SC_CLOSE
。
问题是; X
当收到SC_CLOSE
消息时,如何从主窗口中关闭所有模式对话框?只有X
!因此,PostQuitMessage
这无济于事,因为它会关闭整个应用程序,因此,如果Y, Z ...
打开了其他模式对话框,我们就不想关闭该应用程序。
信息:SC_CLOSE
当我们X
从主线程以及其他线程打开了模态对话框时,主窗口可以处理消息。并且X
没有子模式窗口。
我当前的解决方案是;
X
在打开所有模式对话框时,所有模式对话框均已在一个集合中(线程安全)注册。如果主窗口变为SC_CLOSE
-message,则现在可以迭代所有对话框。然后为每个对话框使用这两行之一。
::PostMessage(pDlg->GetSafeHwnd(), WM_COMMAND, IDOK, 0); //end dialog with idok
::PostMessage(pDlg->GetSafeHwnd(), WM_CLOSE, 0, 0); //or, close dialog
我知道这不是最好的解决方案,但希望能对某人有所帮助。
不要尝试遍历主窗口的所有子窗口来查找对话框。它没有帮助。对话框的所有者,并不意味着它是对话框的父级。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句