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

MFC 文檔/視圖/框架架構:關係圖解與訊息傳遞機制

     編輯:關於C語言

MFC 引入 Document/View 架構,將資料(Document)、顯示與互動(View)、視窗框架(Frame)分離。理解四大核心類別(`CWinApp`、`CFrameWnd`、`CDocument`、`CView`)的建立順序、指標獲取方式與命令路由機制,是開發健壯 MFC 應用的關鍵。

四大核心類別與建立流程

  1. CWinApp:應用程式類別,`InitInstance()` 中建立主框架視窗
  2. CFrameWnd:框架視窗,建立文檔模板(`CDocTemplate`)
  3. CDocTemplate:文檔模板,負責建立 Document 與 View 實例並關聯
  4. CDocument / CView:資料容器與顯示介面,一對多關係(一 Document 可有多 View)

常用指標獲取方式

需求程式碼
應用程式指標`AfxGetApp()`
主框架視窗指標`AfxGetApp()->m_pMainWnd`
框架視窗中獲取當前 Document`GetActiveDocument()`
框架視窗中獲取當前 View`GetActiveView()`
View 中獲取對應 Document`GetDocument()`
Document 遍歷所有 View`GetFirstViewPosition()` + `GetNextView()`
Document 獲取模板指標`GetDocTemplate()`
MDI 獲取當前子視窗`MDIGetActive()`

命令訊息路由規律

使用者輸入(選單、工具列、滑鼠、鍵盤)產生的命令訊息:

  1. 優先發送給當前啟用的 View
  2. 若 View 未處理(無對應 `ON_COMMAND`),轉發給框架視窗
  3. 框架視窗未處理,繼續向上路由至 `CWinApp`

實務建議:命令處理器(`ON_COMMAND`)直接寫在 View 類別中即可;僅當多 View 共享命令且當前 View 不處理時,才需在框架類別補充。

MDI 架構補充

  • 一個應用單一主框架(`CMDIFrameWnd`),可含多個 MDI 子視窗(`CMDIChildWnd`)
  • 每個 View 是子視窗的子視窗;SDI 下 View 父視窗即主框架
  • 可擁有多文檔模板,每模板定義一 Document 對應一或多 View
  • 同一 Document/View 可屬於多個模板
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved