首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 選單訊息路由機制深度解析:視圖→文件→框架→應用程式的傳遞鏈

     編輯:VC 教學

訊息分類

類別範例處理者基類
標準訊息WM_PAINT, WM_SIZE, WM_MOUSEMOVECWnd
命令訊息選單、工具列、快速鍵 (WM_COMMAND)CCmdTarget
通知訊息控制項事件 (BN_CLICKED 等)CCmdTarget

命令訊息路由順序 (單文檔架構)

  1. 主框架 (CMainFrame) 先接收 WM_COMMAND
  2. 轉發給 視圖 (CView)
  3. 視圖無法處理 → 文件 (CDocument)
  4. 文件無法處理 → 回視圖 → 框架 (CFrameWnd)
  5. 框架無法處理 → 應用程式 (CWinApp)

圖解:Frame → View → Doc → View → Frame → App

關鍵點

  • 視圖作為「活動視圖」優先處理,符合使用者焦點直覺
  • 文件處理與資料相關的命令 (如「儲存」、「匯出」)
  • 框架處理視窗級命令 (如「全螢幕」、「關閉」)
  • 應用程式處理全域命令 (如「關於」、「選項」)
  • CCmdTarget::OnCmdMsg 為核心遞迴分發函式,可重寫自訂路由

實驗驗證

在 View/Doc/Frame/App 四類別同加 ON_COMMAND(ID_TEST, OnTest) 並各自 TRACE,點選選單觀察輸出順序,即可親見路由鏈。

常見誤區

  • 以為選單訊息直接送達 View — 實際先經 Frame
  • 以為 Doc 不處理命令 — 實際為第二優先級
  • 忽略 ON_COMMAND_RANGE、ON_UPDATE_COMMAND_UI 同樣走此路由

結語

掌握命令路由鏈,能精準決定「在哪個類別實作哪個命令」,避免重複代碼與責任模糊,是 MFC 架構設計的核心功力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved