在C++程序(embarcadero XE2,vcl)中,我想从父窗口向所有子窗口发送窗口消息。 为此,我注册了一个windowMessage,发送消息的PostMessage(handle,msg,wparam,lparam)
在所有句柄的循环中,并在每个对话框上用WndProc(TMessage& Message)
接收。跟踪打开的子对话框
我的问题是跟踪打开的窗口句柄。由于大多数对话框都是通过Show()
打开的,所以多个对话框可以同时运行。
到目前为止,我用std::vector<HWND>
来存储窗口句柄。但是,这需要我跟踪哪个句柄一次仍然有效。 我可以通过添加一个onClose
处理程序的对话解决这个问题,并在对话框的句柄作为参数的主线程调用一个过程,所以它可以从载体上移除...
是否有更好的解决方案,就像Application.OpenForms
(.NET)中的自更新列表一样?或者,也许更好的方法来通知主对话框中的事件的子对话框?
[在Windows中,对话框是不是*儿童* ,他们是*拥有的Windows *。](https://blogs.msdn.microsoft.com/oldnewthing/20100315-00/?p=14613) – andlabs
这似乎是一个可怕的使用注册窗口消息,这是最好的使用当来自不同供应商的应用程序试图通信时 - 可能通过广播消息。使用WM_USER或WM_APP定义的范围可以更好地发送自己的Windows消息。 –
@andlabs感谢您的评论!如果你没有提到儿童与自有对话之间的区别,我将无法弄清楚为什么科迪的解决方案不起作用。 ^^ – Julian