A-A+

Visual Studio MFC自定义消息的方法

2015年07月05日 C/C++ 阅读 1,330 views 次

消息是Windows运行的基础,从鼠标的移动到窗口大小的改变,这些变化在程序中都是以消息的方式传递的。在Visual Studio或VC++中编写MFC窗口应用程序时我们需要处理大量的消息。在很多时候我们还需要在程序中添加自定义消息,下面将介绍在MFC中添加自定义消息的方法。

(1)建立基于对话框的MFC工程(本例设程序名为Test);

(2)在资源中添加要处理的消息的值,即在CTestDlg.h中添加如下代码(因为很多MFC的消息是在WM_USER内的,所以这里用比WM_USER大的消息):

#define WM_MyMessage (WM_USER+100)

(3)声明消息处理函数,在CTestDlg.h中添加如下代码:

class CTestDlg : public CDialog
{ 
protected:
……
// 生成的消息映射函数
……
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
……

(4)添加消息映射处理,在CTestDlg.cpp中找到如下部分并添加代码:

 BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
……
ON_MESSAGE(WM_MyMessage, OnMyMessage)
END_MESSAGE_MAP()

(5)实现自己的自定义消息处理,完成需要的功能

 LRESULT CTestDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
//MessageBox("recv msg success");
//添加自己的消息处理
……
return 0;    
}

注:

* 如果要发送一个自定义的消息,可使用如下代码:

SendMessage( WM_MyMessage, 0, 0);

PostMessage(WM_MyMessage, 0, 0);

** 如果要定义系统唯一的消息让多个应用程序去处理,基本步骤同上述自定义消息,不同之处如下:

(1)把上面2步骤中的宏 #define WM_MyMessage (WM_USER+100) 使用如下代码代替:

static UINT WM_MyMessage = RegisterWindowMessage("myMessage");

(2)上面4步骤中的代码用如下代码代替:

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
……
ON_REGISTERED_MESSAGE(WM_MyMessage, OnMyMessage)
END_MESSAGE_MAP()

(3)测试消息时,如果要让多个应用程序都接收到这个消息,可使用代码:

::SendMessage(HWND_BROADCAST, WM_MyMessage, 0, 0);

个人公众号“数字化设计CAX联盟”,欢迎关注,共同交流
为您推荐:

给我留言

© 坐倚北风 版权所有 严禁镜像复制 苏ICP备15034888号. 基于 Ality 主题定制 AliCMS
联系邮箱:leanwind@163.con,微信公众号:数字化设计CAX联盟

用户登录

分享到: