^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Date: 20180815
ON_MESSAGE(message, memberFxn)
指定哪一个函数用来处理这个用户定义消息;
头文件: afxmsg_.h
参数:
message 消息ID,这里指的是用户定义消息的ID
memberFxn 消息映射消息处理函数的名称;
函数的类型必须是: afx_msg LRESULT (CWnd::*)(WPARAM, LPARAM);
备注:
用户定义消息不属于任何一种标准Windows WM_MESSAGE消息。当选择消息标识时,必须使用某一范围的值:WM_USER(0x0400)到0x7FFF或WM_APP(0x8000)到0xBFFF。
对于每一个用户定义消息,在message map中必须要有一个ON_MESSAGE宏定义语句来映射到一个消息处理函数。
注意:除了用户定义消息外,ON_MESSAGE还处理较为不常见的Windows消息。
定义:
// 头文件中宏定义用户定义消息:
#define WM_MYMESSAGE (WM_USER + 100)
// 源文件中进行用户定义消息注册
BEGIN_MESSAGE_MAP(CMyWnd2, CWnd)
ON_MESSAGE(WM_MYMESSGAE, OnMyMessage)
END_MESSAGE_MAP()
// 头文件中进行用户定义消息响应函数的声明
// inside the CMyWnd2 class declaration afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
// 源文件中进行用户定义消息响应函数的实现
LRESULT CMyWnd2::OnMyMessage(WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(wParam); UNREFERENCED_PARAMETER(lParam); // Handle message here. return 0; }
怎么使用呢?
1. 如果用户定义消息所在的类是由CWnd类派生的,且在本类中进行调用,那么我们可以调用CWnd::SendMessage()函数;若希望在不同的情况下发送用户定义消息,只需要将SendMessage函数的参数加以标识就ok了,一种方法就是在消息响应函数中,使用条件语句进行不同情况的处理。
2. 如果希望在其它类中响应这个用户定义消息,那么我们可以选择使用win32 的API。比如:当用户定义消息在CMainFrame中,而它对应的响应函数在其它类当中,需这样做:
::SendMessage(::AfxGetMainWnd()->m_hWnd, WM_MYMSG, 0, 0);
注:或选择使用PostMessage。
————》》》》》SendMessage与PostMessage::待做我还是选择暂时学习前辈的