1. 程式人生 > >《深入淺出MFC》第九章 訊息對映與命令傳遞

《深入淺出MFC》第九章 訊息對映與命令傳遞

Windows程式的本質是藉著訊息來維持脈動。每個訊息都有一個程式碼,並以WM_開頭的常量表示。來自選單和工具欄者,都以WM_COMMAND表示,引數wParam記錄訊息的發出者。

MFC的訊息分為三大類,命令訊息(WM_COMMAND),凡派生自CCmdTarget的類都有資格接收命令訊息。除WM_COMMAND外,所有以WM_開頭的都屬於標準訊息,派生自CWnd的類可接收此類訊息。由控制元件產生的訊息,為的是向父視窗傳遞某種情況,這種訊息是以WM_COMMAND形式呈現。

MFC通過三個巨集來進行訊息對映,DECLARE_MESSAGE_MAP(),BEGIN_MESSAGE_MAP(CLASS,BASECLASS),END_MESSAGE_MAP()。標準的訊息並不需要我們指定處理函式名稱,因為處理函式名稱也是標準的,如WM_PAIN會被自動對映到OnPaint函式中,前提是呼叫ON_WM_PAINT()巨集。

整個的訊息對映網通過BEGIN_MESSAGE_MAP()的第二個引數進行連線,因此可以跳過類繼承層次中的某個節點。

在MFC中,多有訊息都將被推送到AfxWndProc中,這裡作為訊息對映的起點。一般訊息只能沿著繼承層次結構進行處理,COMMAND訊息和Notify會進行特殊處理,因為它們可能需要轉個彎。OnCmdMsg用來分配命令訊息的傳遞路徑。命令訊息的路徑根據類中OnCmdMsg函式的不同實現而呈現出不同的傳遞路徑。

在MFC中可以通過更簡單的方式維護UI物件的狀態,通過新增UPDATE_COMMAND_UI訊息實現命令UI物件的狀態更新。