MFC 是 C++ 類別庫,程式設計師透過使用、繼承、擴充適當類別實現功能。核心架構對應:
| 應用角色 | MFC 基類 | 典型衍生類 |
|---|---|---|
| 應用程式物件 | CWinApp | CTApp |
| 文檔物件 | CDocument | CTDoc |
| 視圖物件 | CView | CTView |
| 主框架視窗(MDI) | CMDIFrameWnd | CMainFrame |
| 子框架視窗(MDI) | CMDIChildWnd | CChildFrame |
包含:應用程式、文檔、視圖、主框架(選單、工具列、狀態列)、子框架(文檔視窗)。
stdafx.cpp 生成 專案名.pch。#include "stdafx.h" 為分界線:之前的程式碼視為已預編譯(跳過),之後的程式碼正常編譯。#include "stdafx.h" 必須是每個 .cpp 的第一行非註釋程式碼。| 維度 | MFC 物件 | Windows 物件 |
|---|---|---|
| 資料結構 | C++ 類別實例(堆疊/堆積) | 系統內部結構,透過 Handle(句柄)參考 |
| 層次 | 高層,封裝大部分功能 | 低層,SDK API 直接操作 |
| 建立 | 建構函式(程式碼直接 new/定義) | SDK 函式(CreateWindow 等) |
| 生命週期 | 建構 → 成員函式建立對應 Windows 物件(Handle 變有效) → 解構函式銷毀 | SDK 函式建立/銷毀 |
| 可見範圍 | 進程內、執行緒內(跨執行緒不可直接用) | 系統全域可見(跨進程可用 Handle 通訊) |
| 銷毀 | 解構函式自動清理 | 需對應 SDK 函式釋放(DC 需 ReleaseDC 而非銷毀) |
Create、CreateEx)建立對應 Windows 物件,Handle 寫入 MFC 物件成員變數(如 m_hWnd)。int WINAPI WinMain(...) {
WNDCLASS wc = { ... };
RegisterClass(&wc);
HWND hWnd = CreateWindow(...);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
MFC 將上述流程封裝於 CWinApp::Run、CFrameWnd 等類別中,開發者專注於衍生類別的虛函式覆寫(InitInstance、OnDraw 等)。
stdafx.h 必須第一個 include。