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

    技术2026-06-16  9

                                                                    自定义消息的创建与实现(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

    最新回复(0)