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

VC++ 技術內幕筆記第 1-2 章:Windows 應用程式架構與 MFC 文檔-視圖框架

     編輯:VC 教學

第 1 章:Windows 應用程式基石

  • WinMain:應用程式入口,建立主視窗、進入訊息迴圈;
  • 動態連結 (DLL):Windows 推崇執行期載入共享庫,區別於 DOS 靜態連結;
  • 專案組成:相關源檔編譯連結 → EXE/DLL;
  • 關鍵中間檔:.clw (ClassWizard)、.dsp (專案)、.dsw (工作區)、.ncb (ClassView)、.opt (配置)、.plg (建置日誌);
  • AppWizard:代碼產生器,依對話框選項產生最小可運行架構,功能由基類決定。

第 2 章:MFC 應用程式框架核心

核心類別命名慣例

所有 MFC 類以 C 開頭:CWinApp、CFrameWnd、CDocument、CView...。

應用程式物件啟動流程

// 全域唯一應用程式物件
CMyApp theApp;  // 衍生自 CWinApp

// WinMain 內部 (MFC 提供)
1. 尋找 theApp (全域物件在 main 前已構造)
2. 呼叫 theApp.InitInstance() → 虛函數多態調用 CMyApp::InitInstance()
   → 建立文檔模板、主框架視窗、顯示視窗
3. 呼叫 theApp.Run() → 訊息迴圈 (GetMessage/DispatchMessage)
4. 結束:銷毀主框架 → 退出 Run → 退出 WinMain → 銷毀 theApp

訊息映射取代虛函數表

  • C++ 虛函數表 (vtable) 每類固定 4 bytes/入口,**無論是否重寫**均佔空間;
  • MFC 採用**訊息映射表** (靜態陣列),僅儲存實際處理的訊息,**極大節省記憶體**;
  • 處理函數需提供:原型聲明、函數體、映射宏入口 (ON_WM_XXX)。

文檔-視圖架構

**關鍵**:資料與顯示分離 → **同一文檔可對應多視圖** (如試算表 + 圖表同步)。

文檔/視圖衍生類分工

  • CDocument 基類處理 File Open/Save 選單命令;
  • 衍生文檔類實作實際 Serialize 讀寫資料;
  • 衍生視圖類關聯文檔,負責 OnDraw、列印、輸入處理;
  • MFC 透過虛函數協調四者互動 (如 OnCmdMsg 命令路由)。

文檔資料來源

  • 磁碟檔案 (一次性讀入記憶體);
  • 資料庫 (記錄集/游標);
  • OLE/COM 物件、網路資源等。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
角色基類職責
文檔CDocument資料模型:Open/Save、資料結構、Undo/Redo
視圖CView呈現:OnDraw、列印、滑鼠/鍵盤互動
框架CFrameWnd視窗容器:選單、工具列、狀態列、MDI 子視窗管理
應用程式CWinApp全域協調:啟動、關閉、註冊表、多執行緒