| 場景特徵 | 推薦架構 | 關鍵類 | 理由 |
|---|---|---|---|
| 需文件讀寫、簡單輸入輸出 | 單文檔視圖 (SDI) | CWinApp/CDocument/CView | 文檔/視圖分離,框架自動處理文件序列化 |
| 交互密集、文件操作簡單 | 對話框基礎 | CDialogEx + CFile | 資源編輯器快速佈局,無文檔類開銷 |
| 交互密集、文件操作復雜 | SDI + CFormView | CFormView (基於對話框模板的 View) | 兼具表單交互與文檔架構序列化 |
| 需多文檔同時打開、文檔間傳遞數據 | 多文檔視圖 (MDI) | CMultiDocTemplate | 框架管理多文檔/視圖/框架窗口 |
| 單文檔多視圖(同數據不同展示) | SDI + 分隔條 | CSplitterWnd | 避免 MDI 複雜度,共享單一 Document |
CEdit、CGridCtrl)。CFormView:複雜表單業務首選,資源編輯器設計界面,DoDataExchange 自動綁定。CWnd 衍生類內聚控件與邏輯(如工具條、屬性頁、圖表區),促進復用。CDocument,界面邏輯歸 CView,便於單元測試與多視圖複用。IDD_, IDR_, IDC_),避免衝突。MyApp ├── MyApp.cpp/h // CWinApp 衍生類 ├── MainFrm.cpp/h // CFrameWnd 主框架 ├── MyDoc.cpp/h // CDocument 數據模型 + 序列化 ├── MyView.cpp/h // CFormView 表單界面 + DDX/DDV ├── ChildView.cpp/h // 可選:額外視圖類 ├── res/ // 對話框模板、圖標、工具欄 └── Resource.h // 統一 ID 定義
MFC 架構選型本質是業務複雜度與框架開銷的權衡。SDI 是 80% 場景的最優解;CFormView 橋接對話框易用性與文檔架構強大性;MDI 僅為「真·多文檔並發編輯」保留。堅持單繼承、單一職責、文檔視圖分離,配合子窗口封裝,構建可維護的 MFC 工程。本文整理自 51CTO 博客「利用MFC進行開發的通用方法介紹」。