ClassWizard不允许增加用户自定义消息,所以你必须手工输入。输入后,ClassWizard就可以象处理其它消息一样处理你自定义的消息了。
下面是增加自定义消息的步骤:
第一步:定义消息。开发Windows95应用程序时,Microsoft推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。
第二步:实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LRESULT。
- LRESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam) //Lonefox转注:若是通过MFC添加的函数,必须把类定义中的函数头删除,否则和下面的消息映射定义重叠,编译时报重定义错误
- {
- // TODO: 处理用户自定义消息
- ...
- return 0;
- }
第三步:在类头文件的AFX_MSG块中说明消息处理函数:
- class CMainFrame:public CMDIFrameWnd
- {
- ...
- // 一般消息映射函数
- protected:
- // {{AFX_MSG(CMainFrame)
- 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()
- }
第四步:在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。
- BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
- //{{AFX_MSG_MAP(CMainFrame)
- ON_WM_CREATE()
- ON_WM_TIMER()
- ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP
=======================
Lonefox:我用于在多线程全部完成时发送自定义消息到主窗口,主窗口接收。