自定义消息的创建与实现(c++)

来源:互联网 发布:数据库难学吗 编辑:程序博客网 时间:2024/05/29 12:24

                                                                自定义消息的创建与实现(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对话框,命名为SendCustomeMsg
a.在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_MAP
END_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

原创粉丝点击