工程中如果对话框个数大于两个的话,那么我们经常需要向指定对话框发送消息,并且传递数据(事实上微软也是那么建议的)。那么我们必须确定要跟哪一个对话框发送消息,简单,获取接收消息的对话框的窗口句柄即可。
可以通过GetParent()->m_hWnd,Findow()->m_hWnd,等方式获得。但是前者必须要求发送\接收对话框具有父子窗口关系,后者又必须要求传入窗口的名字,显然这对于程序的封装以及复用是相矛盾的。
这里介绍的方法可以突破上面的限制。
假设:对话框A给对话框B发送消息,双方唯一的关系是B在A中被Create&Show。
实现:
A.h #include"DlgB.h" ... DlgB dlgB; ...
B.h ... HWND hWndCreator; ...
A.cpp ... dlgB.Create(IDD_xxx); dlgB.ShowWindow(SW_SHOW); dlgB.hWndCreator=this->m_hWnd; ...
B.cpp ... ::PostMessage(hWndCreator,MSG_XXX,0U,0L); ...
这样一来,对话框B发送的消息一定能被A收到。而只要在A中添加好对消息“MSG_XXX”的消息响应函数,A就可以对对话框B发送的消息进行响应。
总结:
思路就是在A、B之间维护一个表示A窗口的窗口句柄变量。