MFC自定义消息

MFC已集成了许多消息类型,如WM_LBUTTONDOWN/WM_LBUTTONUP等供我们使用,若无法满足,则需要我们自定义消息。由于MFC的类向导中不允许添加用户自定义消息,所以比喻在程序中添加相应的代码。


添加自定义消息

消息声明

MFC要求,WM_USER以下的是系统消息,WM_USER以上为自己定义消息。例如:

#define WM_MY_MESSAGE (WM_USER + 100)

添加消息映射

消息映射将消息与其对应的响应函数相互关联,消息映射的声明通常在窗口类中完成:

BEGIN_MESSAGE_MAP(CDMTEXEDlg, CDialogEx) // 窗口类的名称
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_CANCEL, &CDMTEXEDlg::OnBnClickedCancel)
	ON_WM_TIMER()
	ON_WM_CTLCOLOR()
    ON_MESSAGE(WM_MY_MESSAGE, &CDMTEXEDlg::OnDevicechange) // 自定义消息的映射:设备拔插
END_MESSAGE_MAP()
  • ON_BN_CLICKED和ON_MESSAGE等为消息映射的类型
  • ON_MESSAGE的两个参数中第一个为自定义的消息,第二个参数为响应消息的函数指针,该函数必须是CDMTEXEDlg窗口类的成员函数

消息处理

afx_msg LRESULT OnDevicechange(WPARAM wParam, LPARAM lParam);

定义系统唯一的消息让多个应用程序去处理

用户定义整个系统唯一的消息,需要调用SDK函数RegisterWindowMessage定义消息,即把上面的宏 #define WM_MyMessage (WM_USER+100) 使用如下代码代替

static UINT WM_MY_MESSAGE = RegisterWindowMessage("USER");

在消息映射中,使用ON_REGISTERED_MESSAGE宏指令取代ON_MESSAGE宏指令

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
  ON_REGISTERED_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
END_MESSAGE_MAP()

测试消息时,如果要让多个应用程序都接收到这个消息,使用:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值