MFC 單文檔多視圖(SDI/MDI)的核心是 **Document/View 分離**:
GetDocument() 訪問數據。class CMyDoc : public CDocument {
CArray m_dataArray;
public:
BOOL OnOpenDocument(LPCTSTR lpszPathName) override {
// 讀取文件填充 m_dataArray
return TRUE;
}
BOOL OnSaveDocument(LPCTSTR lpszPathName) override {
// 將 m_dataArray 寫入文件
return TRUE;
}
void AddData(const MyData& d) {
m_dataArray.Add(d);
UpdateAllViews(nullptr); // 通知所有視圖刷新
}
};
void CMyDialog::OnBtnAdd() {
CMyDoc* pDoc = (CMyDoc*)((CMyApp*)AfxGetApp())->m_pDocTemplate->GetFirstDocPosition();
// 或通過 AfxGetMainWnd()->GetActiveView()->GetDocument()
pDoc->AddData(newData);
}
將原 C 風格全局結構體數組遷移為 CDocument 成員變量(CArray/std::vector),實現數據封裝與多視圖共享。
UpdateAllViews)。