1. 程式人生 > >MFC學習(二):訊息對映

MFC學習(二):訊息對映

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等。
    • 通常,控制元件通知在某些重要事件發生時,由控制元件視窗傳送到父視窗,如開啟一個組合框。
    • 控制元件通知為父視窗進一步控制子視窗提供了機會。例如,開啟一個組合框時,父視窗可以用組合框初建時得不到的訊息填充它。