天天看點

MFC中自由使用自定義消息

消息映射、循環機制是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()

繼續閱讀