**業務邏輯與 UI 解耦**:將原 `main()` 中的算法、數據結構封裝為獨立類,MFC 類僅負責界面交互與調用。
// GraphAlgorithm.h - 原控制台核心代碼提煉
class GraphAlgorithm {
public:
struct EdgeNode { int no; char info; int weight; /* ... */ };
// 原全局函數改為成員函數
void InitGraph(int n);
void AddEdge(int u, int v, int w);
void ShortestPath(int start); // 迪杰斯特拉等
// 提供查詢接口供 UI 調用
CString GetResultText();
private:
// 原全局變量/結構體移至此處
std::vector edges;
int adjMatrix[MAX][MAX];
};
// MainDialog.cpp
void CMainDialog::OnBnClickedBuild() {
UpdateData(TRUE); // UI → 變量
int n = _ttoi(m_strVertexCount); // 獲取輸入
if (n <= 0) { AfxMessageBox(_T("頂點數無效")); return; }
m_algo.InitGraph(n); // 調用業務邏輯
// 解析 m_strEdges 內容調用 AddEdge...
m_strStatus = _T("圖構建完成");
UpdateData(FALSE); // 變量 → UI
}
void CMainDialog::OnBnClickedCalc() {
UpdateData(TRUE);
m_algo.ShortestPath(0); // 假設從 0 開始
m_strResult = m_algo.GetResultText(); // 獲取格式化結果
UpdateData(FALSE);
// 或直接填充 List Control
FillResultList();
}
控制台版 MFC 版 main() → CMainDialog (UI 控制器) ├─ 全局變量 ├─ GraphAlgorithm m_algo (業務模型) ├─ 函數 ├─ OnBnClickedXxx (事件處理) ├─ printf/scanf ├─ DDX/DDV + CEdit/ListCtrl (數據交換) └─ 循環菜單 └─ 消息循環 (框架自動)
控制台轉 MFC 核心是 **「抽取模型、建立對話框、綁定控件、消息驅動、DDX 數據交換」**。保持業務邏輯純粹、無 MFC 依賴,是實現跨平台、單元測試、代碼復用的關鍵。