MFC 消息机制
利用消息映射表
BEGIN_MESSAGE_MAP()
END_MESSAGE_MAP()
这样的宏来关联 消息与消息处理函数 . SendMessage(hwnd, msgINT, ... )有阻塞的 知道有返回才行 或 PostMessage( ... ) 直接投递
做两个实验:
1. 一个窗口程序中的 两个对话框之间传递消息
2. 两个各窗口程序之间传递消息。
Code:
1. 一个窗口程序:
对话框A: 发送消息
CDlgB cb
//参数1 要发送的窗口句柄
:SendMessage(cb.m_hwnd,WM_MSG, 0, 0);
对话框B: 接收消息
//定义消息
#define WM_MSG WM_USER+1
BEGIN_MESSAGE_MAP(CDlgB, CDialog)
ON_MESSAGE(WM_MSG,OnMSG) //
END_MESSAGE_MAP()
//消息处理
LRESULT CDlgB::OnMSG(WPARAM w,LPARAM l){}
2. 两个窗口程序
两个窗口进程间的通信
ON_REGISTERED_MESSAGE(WM_MSG,OnMSG) // 而不是ON_MESSAGE(WM_MSG,OnMSG)
CDlg1 发送
:SendMessage(HWND_BROADCAST ,WM_MSG, 0, 0); // 给所有top level windows
CDlg2 接收
view plain
BEGIN_MESSAGE_MAP(CDlg2, CDialog)
ON_REGISTERED_MESSAGE(WM_MSG,OnMSG)
LRESULT CDlg2::OnMSG(WPARAM w,LPARAM l){}
//消息处理
消息类型要统一,用到RegisterWindowMessage("..."); 相同字符串系统返回唯一的MSG ID
UINT WM_MSG=RegisterWindowMessage("。。。");
END_MESSAGE_MAP()
窗口进程1 CDlg1
UINT WM_MSG=RegisterWindowMessage("。。。");
窗口进程2 CDlg2
浙公网安备 33010602011771号