資源檔 (.rc) 內容
資源檔決定應用程式使用者介面,包含:
- Accelerator:快速鍵對應表
- Dialog:對話框版面與控制項
- Icon:16×16、32×32 兩種尺寸
- Menu:主選單與彈出選單
- String Table:字串資源(非原始碼)
- Toolbar:工具列按鈕影像與 ID
- Version:版本資訊、語言、描述
.rc 內含 #include "afxres.h"、#include "afxres.rc" 引入 MFC 通用資源。
資源編輯器最佳實踐
- 優先使用**資源編輯器**視覺化編輯,修改自動同步
resource.h。
- 避免直接用文字編輯器修改
resource.h 或 .rc,下次開啟資源編輯器時可能遺失變更。
- 新增資源後,對應 ID 自動加入
resource.h,無需手動維護。
建置模式:Debug vs Release
| 特性 | Debug Build | Release Build |
| 偵錯資訊 | 完整 (PDB) | 無 |
| MFC 庫 | MFCxxD.dll (診斷版) | MFCxx.dll (零售版) |
| 執行期庫 | libcmtD.lib / msvcrtd.lib | libcmt.lib / msvcrt.lib |
| 優化 | 關閉 (/Od) | 開啟 (/O2 速度 / /Os 大小) |
| 斷言/診斷宏 | 啟用 (ASSERT, TRACE, VERIFY) | 自動移除 |
| 輸出目錄 | 專案目錄\Debug\ | 專案目錄\Release\ |
開發流程建議
- 開發階段:使用 Debug 模式,利用斷點、單步執行、變數監看、呼叫堆疊。
- 測試階段:切換 Release 模式測試效能、記憶體洩漏、優化後行為差異。
- 發佈階段:Release 版本發布給使用者。
診斷宏實戰
// 常用宏
TRACE(_T("目前索引 = %d, 名稱 = %s\n"), i, name); // 輸出至 Debug 視窗
ASSERT(ptr != NULL); // 條件為假中斷 (僅 Debug)
VERIFY(::SetEvent(hEvent)); // Release 仍執行運算式,Debug 同 ASSERT
ASSERT_VALID(pDoc); // 檢查物件有效性 (CObject::AssertValid)
// 自訂診斷
#ifdef _DEBUG
#define MY_TRACE TRACE
#else
#define MY_TRACE __noop
#endif
調試工具箱
- 斷點:條件斷點、命中計數、資料斷點 (資料變更中斷)。
- 單步執行:F10 逐過、F11 逐入、Shift+F11 跳出。
- 監看視窗:變數值、運算式、記憶體位址。
- 呼叫堆疊:追蹤函數呼叫鏈。
- Spy++:獨立工具,檢視視窗結構、訊息流程、進程/執行緒。
- Dependency Walker:分析 DLL 相依性、匯入/匯出函數。
常見編譯錯誤應對
- 網路/書本代碼貼上後大量錯誤:逐個解決,善用「輸出視窗」雙擊跳轉錯誤行。
- 標頭檔缺漏:
#include <afxwin.h> 等 MFC 核心頭檔。
- Unicode/ANSI 不匹配:專案屬性 → 字元集 設定一致。
- 庫版本衝突:Debug/Release 混用、MFC 靜態/動態連結不一致。
熟練掌握資源管理、建置模式切換與診斷宏,配合 Visual Studio 強大調試器,能將開發效率提升數倍,快速定位並解決疑難雜症。
- 上一篇文章: 《VC++ 技術內幕》學習筆記(五):基本事件處理——訊息映射、常見視窗訊息與惡作劇程式
- 下一篇文章: 《VC++ 技術內幕》學習筆記(三):訊息映射與視圖類——CView 核心、OnDraw 繪圖與 Source Browser 追蹤繼承
Copyright ©
程式碼之家 All Rights Reserved