在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