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

MFC 架構概覽:從文檔-視圖模型到應用程式精靈生成的專案結構

     編輯:關於VC++

一、MFC 是什麼?

MFC (Microsoft Foundation Class Library) 是建立在 Win32 API 之上的 C++ 類別庫,提供應用程式框架,預先定義程式骨架、標準化使用者介面實作,開發者僅需透過預留介面填入業務邏輯。Visual C++ 提供 AppWizard、資源編輯器、ClassWizard 等工具輔助開發全流程。

二、四大封裝層面

  1. Win32 API 封裝:CWnd 封裝 HWND,m_hWnd 儲存句柄,API 封裝為成員函式。
  2. 應用程式概念封裝:文檔-視圖架構,CDocument 管理資料,CView 負責顯示與輸入轉換。
  3. COM/OLE 封裝:簡化 OLE 介面實作複雜度。
  4. ODBC/DAO 封裝:提供資料庫程式設計模式。

三、繼承體系與動態繫結策略

  • 根類別:CObject(RTTI、動態創建、序列化、診斷)。
  • 命令目標:CCmdTarget 封裝訊息處理架構,所有可處理訊息的類別由此衍生。
  • 具體物件基類:CWnd(視窗)、CWinThread(執行緒/應用程式)、CDocument(文檔)等。

虛擬函式表膨脹問題:若每個 Windows 訊息對應一個虛擬函式,虛擬表過大。MFC 採用訊息映射機制,以高效查表方式實現動態繫結,配合虛擬函式提供豐富介面。

四、巨觀框架與應用程式模板

MFC 封裝應用程式概念為開發模板:SDI、MDI、一般 DLL、延伸 DLL、OLE/ActiveX 等。核心均採文檔-視圖為中心思想。

五、典型 MDI 應用程式構成

5.1 核心物件與類別對應

角色基類別衍生類別 (AppWizard 產生)說明
應用程式CWinAppCTApp唯一實例,負責初始化/執行/結束
主框架視窗CMDIFrameWndCMainFrame包含工具列、狀態列、MDI 用戶區
文檔框架視窗CMDIChildWndCChildFrame包含視圖視窗
文檔CDocumentCTDoc管理資料,提供存取介面
視圖CViewCTView顯示資料,轉換使用者輸入
文檔模板CMultiDocTemplate—管理上述物件創建

5.2 物件關係圖

CWinApp → CMultiDocTemplate → CMDIFrameWnd (含 CToolBar/CStatusBar) → CMDIChildWnd → CView ↔ CDocument。所有類別最終繼承自 CObject,處理訊息者繼承自 CCmdTarget。

六、AppWizard 產生的檔案結構

檔案用途
stdafx.h / stdafx.cpp預編譯標頭,加速建置
resource.h資源 ID 定義
t.h / t.cpp應用程式類別 CTApp 及全域 theApp
mainfrm.h / mainfrm.cpp主框架 CMainFrame
childfrm.h / childfrm.cpp文檔框架 CChildFrame
tdoc.h / tdoc.cpp文檔 CTDoc
tview.h / tview.cpp視圖 CTView

包含依賴:t.cpp 包含所有使用者定義類別標頭;tview.cpp 需 tdoc.h;其餘實作檔多僅包含自身標頭。

七、預編譯標頭機制

  • stdafx.cpp 編譯產生 專案名.pch。
  • 所有 .cpp 首行 #include "stdafx.h",編譯器跳過此行前代碼,直接使用 .pch。
  • 除錯版本自動加入 THIS_FILE 宏記錄檔名。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved