1. 程式人生 > >MFC 自定義訊息

MFC 自定義訊息

訊息對映、迴圈機制是Windows程式執行的基本方式。VC++ MFC 中有許多現成的訊息控制代碼,可當我們需要完成其它的任務,需要自定義訊息,
就遇到了一些困難。在MFC ClassWizard中不允許新增使用者自定義訊息,所以我們必須手動在程式中新增相應程式碼,以便可以象處理其它訊息一樣處理自定義訊息。

自定義訊息的步驟如下:
(1)建立Single Document的MFC Application,工程名為:MyMessage
(2)自定義訊息:
第一步:定義訊息
在Resource.h中新增如下程式碼:

// 推薦使用者自定義訊息至少是UM_USER+100,因為很多新控制元件也要使用UM_USER訊息。UM:User Message

#define UM_MY_MESSAGE (UM_USER+1)

第二步:宣告訊息處理函式
選擇CMainFrame類中新增訊息處理函式
在MainFrm.h檔案中,類CMainFrame內,宣告訊息處理函式,程式碼如下:

protect:
    afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); 

第三步:實現訊息處理函式
在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(UM_MY_MESSAGE,OnMyMessage)
     // ON_REGISTERED_MESSAGE (WM_MY_MESSAGE,OnMyMessage)
END_MESSAGE_MAP()

 如果使用者需要一個定義整個系統唯一的訊息,可以呼叫SDK函式RegisterWindowMessage定義訊息:
在Resource.h中將程式碼

#define UM_MY_MESSAGE (UM_USER+1)

替換為:

static UINT UM_MY_MESSAGE=RegisterWindowMessage(_T("User"));

並使用ON_REGISTERED_MESSAGE巨集指令取代ON_MESSAGE巨集指令,其餘步驟同上。
注:如果仍然使用ON_MESSAGE巨集指令,compile可以通過,但是無法響應訊息。
當需要使用自定義訊息時,可以在相應類中的函式中呼叫函式PostMessage或SendMessage傳送訊息PoseMessage(WM_MY_MESSAGE,O,O)。

原來來自:http://www.cnblogs.com/xulei/archive/2007/11/22/968170.html,略有改動