首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC CCmdTarget:命令目標架構與執行緒關係詳解

     編輯:程式設計疑難解答

CCmdTarget 是什麼?

CCmdTarget 是 MFC 命令路由 的基底類別,意為「命令的目標」。它實作了 OnCmdMsg 虛擬函式,構成命令訊息傳遞鏈:

View → Frame → Document → Application → 系統

核心機制

  • 訊息對應表:DECLARE_MESSAGE_MAP / BEGIN_MESSAGE_MAP 將命令 ID 對應到處理函式。
  • 命令路由:CCmdTarget::OnCmdMsg 依序嘗試自身、基類、外部目標處理命令。
  • 更新 UI:ON_UPDATE_COMMAND_UI 讓目標決定工具列/選單項目啟用狀態。

與執行緒的關係

CCmdTarget 本身不建立執行緒。 MFC 應用程式預設為單一 UI 執行緒(主執行緒),所有命令訊息皆在該執行緒的訊息迴圈中分派。若需背景運算:

  1. 在命令處理函式中啟動 AfxBeginThread 或 std::thread。
  2. 背景執行緒 不可 直接操作 UI 物件(需 PostMessage 回主執行緒)。
  3. 文件/視圖物件(繼承 CCmdTarget)仍駐留於主執行緒。

關鍵類別繼承關係

CObject
  └─ CCmdTarget
        ├─ CWnd          (視窗、控制項)
        ├─ CDocument     (文件)
        ├─ CWinApp       (應用程式)
        └─ CFrameWnd     (框架視窗)

參考資源

深度原理請參考:MFC 命令路由機制深度解析

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