自定义消息的步骤:
一、定义消息。
- #define WM_MYMESSAGE (WM_USER + 100)
Microsoft推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。
二、在.h文件中的AFX_MSG块中声明消息处理函数
- afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
如下:
- protected:
- // {{AFX_MSG(...)
- afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
- afx_msg void OnTimer(UINT nIDEvent);
- afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
三、在.cpp文件中添加消息映射宏
- ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
如下:
- BEGIN_MESSAGE_MAP(...)
- //{{AFX_MSG_MAP(...)
- ON_WM_CREATE()
- ON_WM_TIMER()
- ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
四、在.cpp文件中编辑消息处理函数
- LRESULT YourClass::OnMyMessage(WPARAM wParam, LPARAM lParam)
- {
- return 0;
- }
截获消息的方法
在你需要使用消息处理函数的地方使用SendMessage(WM_MYMESSAGE)或PostMessage(WM_MYMESSAGE)将消息发送到消息队列。
两者的区别如下:
SendMessage:将消息发送到消息队列后,等待消息处理完后才会返回,继续执行执行其后代码。
PostMessage:将消息发送到消息队列后,不等待消息处理,立即返回,并执行其后代码。