第 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 | 資料模型:Open/Save、資料結構、Undo/Redo |
| 視圖 | CView | 呈現:OnDraw、列印、滑鼠/鍵盤互動 |
| 框架 | CFrameWnd | 視窗容器:選單、工具列、狀態列、MDI 子視窗管理 |
| 應用程式 | CWinApp | 全域協調:啟動、關閉、註冊表、多執行緒 |
**關鍵**:資料與顯示分離 → **同一文檔可對應多視圖** (如試算表 + 圖表同步)。
文檔/視圖衍生類分工
CDocument 基類處理 File Open/Save 選單命令;
- 衍生文檔類實作實際
Serialize 讀寫資料;
- 衍生視圖類關聯文檔,負責
OnDraw、列印、輸入處理;
- MFC 透過虛函數協調四者互動 (如
OnCmdMsg 命令路由)。
文檔資料來源
- 磁碟檔案 (一次性讀入記憶體);
- 資料庫 (記錄集/游標);
- OLE/COM 物件、網路資源等。
- 上一篇文章: VC++ 技術內幕筆記第 4 章:事件處理、映射模式與捲動視圖
- 下一篇文章: VC++ 兩種 HTTP 取網頁原始碼方案比較:CInternetSession vs MSXML XMLHTTP
Copyright ©
程式碼之家 All Rights Reserved