在MFC中如何自定义消息及相应事件(VC6.0及VS2005)
2012-01-01 16:42:18| 分类: VS2005&VC++ | 标签:自定义消息 message |字号大中小 订阅
自定义消息的步骤如下:
(1)建立Single Document的MFC Application,工程名为:MyMessage
(2)自定义消息:
第一步:定义消息
在Resource.h中添加如下代码:
//推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。
#define WM_MY_MESSAGE (WM_USER+100)
第二步:声明消息处理函数
选择CMainFrame类中添加消息处理函数
在MainFrm.h文件中,类CMainFrame内(其实就是你想要进行响应的窗体类),声明消息处理函数,代码如下:
protect:
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
PS:返回类型必须是LRESULT,不然是void等等类型。
第三步:实现消息处理函数
在MainFrm.cpp文件中添加如下代码:
LRESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
//TODO: Add your message handle code
return 0;
}
第四步:在CMainFrame类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_MESSAGE(WM_MY_MESSAGE,OnMyMessage)
//ON_REGISTERED_MESSAGE (WM_MY_MESSAGE,OnMyMessage)
END_MESSAGE_MAP()
如果用户需要一个定义整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage定义消息:
在Resource.h中将代码
#define WM_MY_MESSAGE (WM_USER+100)
替换为:
static UINT WM_MY_MESSAGE=RegisterWindowMessage(_T("User"));
并使用ON_REGISTERED_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。
注:如果仍然使用ON_MESSAGE宏指令,compile可以通过,但是无法响应消息。
当需要使用自定义消息时,可以在相应类中的函数中调用函数PostMessage或SendMessage发送消息PoseMessage(WM_MY_MESSAGE,0,0)。
VC6.0开发环境:
区别:
返回类型可以是void类型,这个可以参见孙鑫老师的第十五课讲解。