VC 中自定义消息的方法 2009-07-13 17:22 第一: 简易版本: 定义一个自定义消息号:const UINT WM_MYMESSAGE = WM_USER + n; // 自定义消息一般大于WM_USER ,然后就可以为该消息添加映射了 afx_msg LRESULT OnMyMessage ( WPARAM wParam, LPARAM lParam ); ON_MESSAGE ( WM_MYMESSAGE, OnMyMessage ) LRESULT cxx::OnMyMessage ( WPARAM wParma, LPARAM lParam ) { ... } 如果该消息不需要返回值,也不需要参数,那么可以使用宏ON_MESSAGE_VOID来映射 afx_msg void OnMyMessage (); ON_MESSAGE_VOID ( WM_MYMESSAGE, OnMyMessage ) void cxx::OnMyMessage () { ... } 复杂全面版本: 消息映射、循环机制是 Windows程序运行的基本方式。VC++ MFC 中有许多现成的消息句柄,可当我们需要完成其它的任务,需要自定义消息,就遇到了一些困难。在 MFC ClassWizard中不允许添加用户自定义消息,所以我们必须在程序中添加相应代码,以便可以象处理其它消息一样处理自定义消息。通常的做法是采取以 下步骤: 第一步:定义消息。 推荐用户自定义消息至少是 WM_USER+100,因为很多新控件也要使用WM_USER消息。 #define WM_MY_MESSAGE (WM_USER+100) 第二步:实现消息处理函数。 该函数使用WPRAM和 LPARAM参数并返回LPESULT。 LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam) { // 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() 如果用户需要一个定义整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage定义消息: static UINT WM_MY_MESSAGE=RegisterWindowMessage("User"); 并...