自定义消息的创建与实现(c++)1:自定义消息分为以下4个步骤:
a.消息定义在stdafx.h头文件中加入如下代码:#define WM_MSG WM_USER+100,WM_MSG是用户自己定义的一个消息名称.WM_USER是window为用户预留的,比它小的都为系统消息.为了避免冲突,应适当设置
b.消息声明afx_msg LONG OnMyMsg(WPARAM wParam,LPARAM lParam)DECLARE_MESSAGE_MAP,通常消息的处理函数都以On开头
c.消息映射ONMESSAGE是用来处理自定义消息的宏,增加的自定义消息主要通过它来传递
BEGIN_MESSAGE_MAP()ONMESSAGE(WM_MSG,OnMyMsg)END_MESSAGE_MAP()
d.实现消息处理函数
/***************************************************/
实例Example实现步骤:Part one:发送端:SendCustomeMsg新建MFC对话框,命名为SendCustomeMsga.在CSendCustomeMsgDlg.cpp预处理中加入如下定义的消息#define WM_ENABLEBUTTON WM_USER+100
b.对话框加入一个按钮,具体代码如下:HWND hwnd=::FindWindow (NULL,"ReceiveCustomeMsg"); if(hwnd==NULL) { AfxMessageBox("没有收到接收消息的窗体"); return; } //param1:HANDLE //param2:Message //param3:WPARAM //param4:LPARAM ::SendMessage (hwnd,WM_ENABLEBUTTON,0,0);
Part two:接收端:ReceiveCustomeMsg新建MFC对话框,命名为ReceiveCustomeMsg
a.在CReceiveCustomeMsgDlg.cpp 的OnInitDialog加入如下代码 GetDlgItem(btnTagMessage)->EnableWindow(FALSE);
b.在CSendCustomeMsgDlg.cpp中加入与发送端一样的消息定义#define WM_ENABLEBUTTON WM_USER+100
c.在CSendCustomeMsgDlg.cpp中加入消息宏及相应的映射函数BEGIN_MESSAGE_MAP(CReceiveCustomeMsgDlg, CDialog) //{{AFX_MSG_MAP(CReceiveCustomeMsgDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_MESSAGE(WM_ENABLEBUTTON,OnReceive) //增加部分 //}}AFX_MSG_MAPEND_MESSAGE_MAP()
d.在CSendCustomeMsgDlg.h中加入消息映射函数的声明 //映射函数的声明 afx_msg void OnReceive(WPARAM wParam,LPARAM lParam); DECLARE_MESSAGE_MAP()
e.消息映射函数的具体实现代码在CSendCustomeMsgDlg.cpp中加入如下代码void CReceiveCustomeMsgDlg::OnReceive (WPARAM wParam,LPARAM lParam){if(wParam==0 && lParam==0){ GetDlgItem(btnTagMessage)->EnableWindow(TRUE); AfxMessageBox("按钮已被启用");}}
Part three:实例运行顺序:先启动ReceiveCustomeMsg.exe,再启动SendCustomeMsg.exe
附源代码下载:http://download.csdn.net/source/3029554
