VC++ 中菜單命令消息的路由順序為:
View(視圖類) → Document(文檔類) → Frame(框架類) → Application(應用程式類)
| 消息類型 | 來源 | 處理類別基類 | 特點 |
|---|---|---|---|
| 標準訊息 | WM_* 系列(除 WM_COMMAND) | CWnd | 視窗專屬,不經命令路由 |
| 命令消息 | 菜單、工具列、快捷鍵 | CCmdTarget | 遵循標準路由鏈,可被多層處理 |
| 通知消息 | 控件(按鈕、列表等) | CCmdTarget | WM_NOTIFY,同屬命令路由體系 |
CFrameWnd)首先接收 WM_COMMANDCView)CDocument)CFrameWnd)CWinApp)CCmdTarget::OnCmdMsg 遞歸實現❌ 誤以為框架最先處理 → 實際框架只是入口,主動分發給視圖
❌ 以為標準訊息也走命令路由 → 標準訊息直接由視窗處理函數接收
❌ 在文檔類處理 UI 更新邏輯 → 應盡量在視圖或框架層處理 UI 狀態
掌握命令路由順序與分工原則,能讓 MFC 應用架構更清晰、維護性更強。建議團隊制定命令處理分層規範,避免邏輯分散導致除錯困難。