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    

  

posted on 2011-12-30 15:00  MIRC_C  阅读(225)  评论(0)    收藏  举报

导航