MFC——向指定对话框传递消息

时间:2021-11-26 14:30:56

工程中如果对话框个数大于两个的话,那么我们经常需要向指定对话框发送消息,并且传递数据(事实上微软也是那么建议的)。那么我们必须确定要跟哪一个对话框发送消息,简单,获取接收消息的对话框的窗口句柄即可。

可以通过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窗口的窗口句柄变量。