首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MFC 單文檔多視圖架構下的文件操作最佳實踐:集中管理於 CDocument

     編輯:程式設計綜合問答

架構原則

MFC 單文檔多視圖(SDI/MDI)的核心是 **Document/View 分離**:

  • CDocument:負責數據存儲、序列化(讀/寫文件)、數據修改通知。
  • CView / CDialog:負責顯示、用戶交互,通過 GetDocument() 訪問數據。

推薦做法

1. 文件操作封裝在 CDocument

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); // 通知所有視圖刷新
    }
};

2. 視圖/對話框訪問數據

void CMyDialog::OnBtnAdd() {
    CMyDoc* pDoc = (CMyDoc*)((CMyApp*)AfxGetApp())->m_pDocTemplate->GetFirstDocPosition();
    // 或通過 AfxGetMainWnd()->GetActiveView()->GetDocument()
    pDoc->AddData(newData);
}

3. 避免全局變量/數組

將原 C 風格全局結構體數組遷移為 CDocument 成員變量(CArray/std::vector),實現數據封裝與多視圖共享。

優勢

  • 自動支持「另存為」「恢復」「最近文件」等框架功能。
  • 多視圖/對話框數據同步由框架保證(UpdateAllViews)。
  • 符合 MFC 設計模式,代碼可維護性強。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved