-
消息映射機制
鎖定
- 中文名
- 消息映射機制
- 性 質
- 一個程序運行的動力源泉
消息映射機制映射機制
MFC使用一種消息映射機制來處理消息,在應用程序框架中的表現就是一個消息與消息處理函數一一對應的消息映射表,以及消息處理函數的聲明和實現等代碼。當窗口接收到消息時,會到消息映射表中查找該消息對應的消息處理函數,然後由消息處理函數進行相應的處理。SDK編程時需要在窗口過程中一一判斷消息值進行相應的處理,相比之下MFC的消息映射機制要方便好用的多。
消息映射機制消息分類
Windows消息分為系統消息和用户自定義消息。Windows系統消息有三種:
1.標準Windows消息。除WM_COMMAND外以WM_開頭的消息是標準消息。例如,WM_CREATE、WM_CLOSE。
2.命令消息。消息名為WM_COMMAND,消息中附帶了標識符ID來區分是來自哪個菜單、工具欄按鈕或加速鍵的消息。
3.通知消息。通知消息一般由列表框等子窗口發送給父窗口,消息名也是WM_COMMAND,其中附帶了控件通知碼來區分控件。
CWnd的派生類都可以接收到標準Windows消息、通知消息和命令消息。命令消息還可以由文檔類等接收。
用户自定義消息實際上就是用户定義一個宏作為消息,此宏的值應該大於等於WM_USER,然後此宏就可以跟系統消息一樣使用,窗口類中可以定義它的處理函數。
消息映射機制映射表
除了一些沒有基類的類或CObject的直接派生類外,其他的類都可以自動生成消息映射表。消息映射表的形式如下面的例子:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
ON_WM_CREATE()
ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize)
ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::OnToolbarCreateNew)
ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnApplicationLook)
ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnUpdateApplicationLook)
ON_WM_SETTINGCHANGE()
END_MESSAGE_MAP()
在BEGIN_MESSAG_MAP和END_MESSAGE_MAP之間的內容成為消息映射入口項。消息映射除了在實現文件中添加消息映射表外,在類的定義文件中還會添加一個宏調用:
DECLARE_MESSAGE_MAP()
一般這個宏調用寫在類定義的結尾處。
消息映射機制處理函數
如何添加消息處理函數呢?不管是自動還是手動添加都有三個步驟,以單文檔應用程序的框架類CMainFrame的WM_CREATE消息為例説明:
1.在類定義中加入消息處理函數的函數聲明,注意要以afx_msg打頭。例如MainFrm.h中WM_CREATE的消息處理函數的函數聲明:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);。
2.在類的消息映射表中添加該消息的消息映射入口項。例如WM_CREATE的消息映射入口項:ON_WM_CREATE()。
3.在類實現中添加消息處理函數的函數實現。例如MainFrm.cpp中WM_CREATE的消息處理函數的實現:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
......
}
- 參考資料
-
- 1. VS2010/MFC編程入門之五(MFC消息映射機制概述) .雞啄米.2012-03-20[引用日期2012-08-18]
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:13次歷史版本
- 最近更新: baichao0627