MFC學習(二):訊息對映
阿新 • • 發佈:2018-11-30
1. 訊息對映表的組成
- 巨集DECLARE_MESSAGE_MAP,用在類的宣告中,用來宣告訊息對映表。
- 巨集BEGIN_MESSAGE_MAP,在使用類宣告外,用來定義連結節點和填寫連結串列節點中的資料,其格式為BEGIN_MESSAGE_MAP(類名稱, 基類名稱)。
- 巨集ON_XXXX,用於填寫類訊息對映表中的單個表項,使用在BEGIN_MESSAGE_MAP的後面。
- 巨集END_MESSAGE_MAP,訊息處理函式表的結束巨集,是表示訊息對映表結束的標誌。
2. 單個表項的訊息型別
- 標準訊息/視窗訊息(Window Message)
- ON_WM_XXXX,如ON_WM_LBTRRONDOWN、ON_WM_CREATE等。
- 一般與視窗的內部運作有關,如建立視窗、繪製視窗和銷燬視窗等。通常,訊息是從系統傳送到視窗,或從視窗傳送到視窗。
- 沒有引數,不需要傳遞訊息ID或處理函式,因為都有標準的訊息處理函式。
- 命令訊息
- 來自選單、工具條按鈕、加速鍵等使用者介面物件的WM_COMMAND通知訊息
- 是應用程式自己定義的訊息,系統沒有標準的標識和預設的訊息處理函式,所以用巨集來實現命令訊息對映時,需要指定訊息標識ID、對應的訊息處理函式。
- 一般與處理使用者請求相關,當用戶單擊一個選單項或工具欄時,命令訊息產生,並被髮送到能處理該請求的類物件(如,裝載檔案、編輯文字和儲存選項等)。
- ON_COMMAND和ON_UPDATE_COMMAND_UI
- ON_COMMAND:點了按鈕或選單項後的響應訊息,處理該按鈕或選單等對應的功能。
- ON_UPDATE_COMMAND_UI
- 用來表示對應的按鈕和選單項的狀態的響應訊息,處理該按鈕或選單對應的使用者介面顯示狀態,比如選中、變灰,通常與ON_COMMAND一起出現
- 如果在邏輯程式碼中設定控制元件的狀態,包括選擇,不可用等,要設的地方很多,效率低,容易遺漏,不易修改。ON_UPDATE_COMMAND_UI 很好地解決了這個問題,基本原理是當程序空閒時,應用程式自動產生WM_IDLEUPDATECMDUI訊息,更新所有控制元件狀態。
- 所以一般ON_COMMAND比ON_UPDATE_COMMAND_UI要多
- 通知訊息/控制元件通知
- 由按鈕、文字編輯框等控制元件產生的訊息。
- 由於控制元件種類很多,所以實現訊息對映巨集的格式也不盡相同,比如ON_BN_CLICKED、ON_CBN_DBLCLK等。
- 通常,控制元件通知在某些重要事件發生時,由控制元件視窗傳送到父視窗,如開啟一個組合框。
- 控制元件通知為父視窗進一步控制子視窗提供了機會。例如,開啟一個組合框時,父視窗可以用組合框初建時得不到的訊息填充它。