深入淺出MFC學習筆記(第7章:簡單而完整的MFC骨幹程序)

      第七章  簡單而完整的MFC骨幹程序。

    這一章主要是剖析有AppWizard產生的完整的MFC骨幹程序。

    首先要熟記MFC類層次結構,這是理解MFC構建的前提。

    MFC層次結構圖:文檔視圖結構是MFC進化爲應用程序框架的靈魂,在MFCCDocument負責處理數據,它只是個空殼,我們可以重寫Serialze函數,派生符合我們需求的類。與CDocument相輔相成的是CView類,它是負責數據得顯示的類,同時它還負責程序與使用者之間的交互。使用者對數據的修改都需要依賴CView類的響應。

    有關文件讀寫的操作是由CDocument中的Serilize虛函數負責的。有關顯示的操作是在CView中的OnDraw虛函數中處理的。當我們派生自己的兩個類CMyDocCMyView,只要把所有精力花在CMyDoc::SerializeCMyView::OnDraw身上就可以了。

    先介紹Document Template,在文檔視圖結構中,雖然CView負責顯示,但是它的外圍必須有一個外框窗口作爲舞臺。也可以說Document TemplateView窗口的一個容器,數據,數據的顯示,以及容納數據顯示的窗口,它們是一體的。缺一不可。

程序每打開一個文件就應該產生三個對象:

1:CDocument對象。

2:CView對象。

3:外框窗口CMDIChildWnd對象。

這些對象是由Document Template對象進行管理

如:CMultiDocTemplate *pDocTemplate=new CMultiDocTemplate (   IDR_SCRIBTYPE,

   RUNTIME_CLASS(CMyDoc),

   RUNTIME_CLASS(CChildFrame),

   RUNTIME_CLASS(CMyView)

);

  AddDocTemplate(pDocTemplate);

    如果程序支持不同的文件格式,就需要不同的CMultiDocTemplate 。它的第一個參數,表示此文件類型所使用的資源,如ICONMENU和字符串資源。字符串資源用以完整描述文件類型。這可以在程序中獲得,通過調用CDocTemplate::GetDocString

    RUNTIME_CLASS是一個宏,返回傳遞來的類中的CRuntimeClass靜態對象。因此,每當使用者打開一份文件,Document template就能根據此創建三個對象,打開並顯示相應文件。

因此在CMyWinAppInitInstance中首先new了一個CMultiDocTemplate 對象,它用於管理DocumentviewFrame窗口。

LoadFrame用於產生主窗口並加載菜單,同時制定窗口標題、文件標題、擴展名等。LoadFrame內部將調用Create,後者將調用CreateWindowEx,觸發WM_CREATE消息。

   一份Document可以映射給多個View顯示,使用者對Document的任何操作都必須通過Document Frame窗口,消息隨後傳到CView

  構建主窗口有兩個步驟,首先new一個CMDIFrameWnd對象,然後調用其LoadFrame函數,在此函數內會調用Create函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章