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

《VC++技術內幕》學習筆記(一):MFC 架構核心、消息機制、項目文件、源碼瀏覽器

     編輯:VC++

讀書背景

本系列基於潘愛民、王國印譯《VC++技術內幕》第四版(清華大學出版社)。建議先具備 Windows SDK 32 位編程基礎,能用純 API 寫出簡單視窗程式,再啟動本書學習效果最佳。

Day 1 核心收穫

1. WinMain 被 MFC 封裝

  • SDK 程式入口是 WinMain,負責註冊窗口類、創建主窗口、進入消息循環。
  • MFC 將 WinMain 隱藏在框架內部 (appmodul.cpp),開發者直接繼承 CWinApp 並重寫 InitInstance 即可。

2. 核心消息清單(必須熟記)

查閱 MSDN `WM_ Messages` 可獲取完整列表與參數說明。

3. GDI 與設備無關性

Windows 提供統一的 圖形設備介面 (GDI)。程式調用 CDC 成員函數 (如 TextOut, Ellipse) 操作邏輯座標,系統自動映射到物理設備 (顯示器、印表機、繪圖儀)。這就是「設備無關性」的體現。

4. DLL:代碼重用的典範

  • 將獨立模組、自定義類編譯為 DLL,主程式動態載入。
  • 優點:模組解耦、熱更新、減小主程式體積、跨語言調用 (C/C++/VB/C# 均可 LoadLibrary)。

5. Developer Studio 產生的中間文件速查表

消息觸發時機典型處理
WM_CREATE窗口創建時初始化資源、創建子控件
WM_LBUTTONDOWN滑鼠左鍵按下拖曳開始、點擊響應
WM_CHAR鍵盤字符輸入文本編輯、快捷鍵
WM_CLOSE用戶點擊關閉按鈕提示保存、銷毀窗口
WM_COMMAND菜單/按鈕/加速鍵命令分發
WM_TIMER定時器到期動畫、輪詢、自動保存
副檔名用途可否手動編輯/刪除
.apsResource View 狀態可刪,重開專案自動重建
.bsc瀏覽器資訊 (供 Source Browser)可刪,重新建立瀏覽資訊後重建
.clwClassWizard 資訊**不可手動編輯**,新增類後需重建
.dsp專案文件 (VC6)**不可手動編輯/刪除**
.dsw工作空間文件**不可手動編輯/刪除**
.mak外部 Makefile (NMake 用)可編輯,但通常由 IDE 維護
.ncbClass View 資訊可刪,重開專案自動重建
.opt工作空間配置 (開啟文件、佈局)可刪
.plg建置日誌可刪

6. Source Browser (源碼瀏覽器) —— 閱讀代碼的核武器

快捷鍵:Alt+F12 打開瀏覽視窗。四大核心視圖:

  • Definitions and References:任意符號 (函數/變數/類/宏) 的定義位置與所有引用處。
  • Call Graph / Caller Graph:函數調用關係圖 (誰調用它、它調用誰)。
  • Derived Class Graph / Base Class Graph:類繼承體系圖,含成員列表。
  • File Outline:單個文件內的類/函數/數據成員定義與使用位置。

**實戰建議**:接手陌生專案時,先用 Class View 找到核心類,再用 Source Browser 的 Base Class Graph 看清繼承鏈,再用 Call Graph 梳理關鍵流程,效率提升 10 倍。

動手實驗:AppWizard 生成空專案,觀察文件與類結構

  1. New Project → MFC AppWizard (exe) → Single Document → 其餘默認。
  2. 查看專案目錄下的所有文件,對照上表理解用途。
  3. 在 Class View 展開 CMyApp, CMainFrame, CMyDoc, CMyView,觀察繼承關係。
  4. 用 Source Browser 選擇 CMyView → Alt+F12 → Base Class and Members,查看從 CView 繼承的海量虛函數。

**雷神心法**:「不動手不編程」。每個示例必須手敲、編譯、運行、修改、再運行。將 Hello World 換成自己的簽名,感受 MFC 框架自動生成的菜單、工具列、狀態列、關於對話框、列印預覽……這就是「站在巨人肩膀上」的具體感受。

下一篇預告

Day 2:Microsoft 基礎類庫應用程式框架—— CWinApp, CFrameWnd, CDocument, CView 四大核心類的協作關係,以及兩個從零手寫的最小 MFC 程式對比。

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