MFC中CMainFrame類CDoc類CView類CApp類之間關係

來源:互聯網
上載者:User

標籤:

用APPWIZARD這個工具聲稱的應用程式架構包括了應用程式基底本的四個類,

分別是:CApp,CMainFrame,CDoc,CView。

其中 CApp負責整個應用程式的管理,CDOC類中有一個CAPP的指標,也可以認為應用程式是從CApp開始執行的。

CMainFrame是主視窗架構

CDoc是應用程式資料來源(文檔)主要是用來管理資料,提供儲存和載入資料的功能。有關檔案的讀寫操作在CDoc的Serialize函數中進行。

CView是應用程式資料顯示(視圖)主要是用來資料顯示,以及給使用者提供對資料的編輯和修改功能。有關資料或圖形的顯示操作在CView的OnDraw函數中進行。

基本的應用程式就是由這四個類構成的。使用者需要做的就是對這些類執行個體化,以實現所需要的具體功能。

在SDI(單文檔)介面中,菜單響應遵循這樣一個順序:菜單訊息先由CMainFrame類接收,CMainFrame並不直接在內部尋找對應的相應函數,而是到CView類尋找。如果CView類有該訊息的響應函數,那麼就直接調用CView類中的響應函數,否則,轉到CDoc類尋找,如果CDoc類中存在該訊息的響應函數,那麼就直接調用CDoc類中的響應函數,否則,返回到CMainFrame類尋找。如果CMainFrame類中也沒有,返回到CApp類中尋找。如果在CApp類中也沒有找到,表示沒有該菜單的響應函數。

可以這樣來理解,菜單訊息響應函數的順序是:CView>CDoc>CMainFrame>CApp

 

架構、文檔、視圖類之間的調用關係

1、主架構(CFrameWnd)中訪問視圖(CView)
CView* GetActiveView() const;
通常定義的視圖為CView的衍生類別,在調用自訂視圖對象的方法時

應該這樣寫:((CMouseKeyView*)GetActiveView())->MyFunc();

2、主架構(CFrameWnd)中訪問文檔(CDocument)
GetActiveDocument,返回CDocument對象;

3、在視圖(CView)中訪問文檔(CDocument)
inline CMouseKeyDoc* CMouseKeyView::GetDocument()
    {return (CMouseKeyDoc*)m_pDocument;}

4、在視圖(CView)中訪問架構(CFrameWnd)
CFrameWnd* GetParentFrame() const;

5、在文檔(CDocument)中訪問架構(CFrameWnd)
CWnd* AfxGetMainWnd();
CWnd* AfxGetApp()->m_pMainWnd;

6、在文檔(CDocument)中訪問視圖(CView)
UpdateAllViews
功能:通知所有的視圖文檔已被修改的資訊
原型:
    void UpdateAllViews(
      CView* pSender, // 要更新的視圖指標,如果希望更新所有視

圖,將此參數設為NULL
      LPARAM lHint=0L, // 包含更改訊息的通知
      CObject* pHint=NULL // 保管更改訊息的對象
    }

7、在其他類中訪問文檔類(CDocument)
CDocument* GetDocument()
{
    CFrameWnd* frm=(CFrameWnd*)::AfxGetMainWnd();
    ASSERT(frm);
    CDocument* pDoc=frm->GetActiveDocument();
    ASSERT(pDoc);
    ASSERT(pDoc->IsKindOf(RUNTIME_CLASS(CMouseKeyDoc)));
    return (CMouseKeyDoc*)pDoc;
}

MFC中CMainFrame類CDoc類CView類CApp類之間關係

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.