C++ MFC視圖和窗口的基本概念

原文鏈接:http://c.biancheng.net/cpp/html/3083.html

視類窗口

視類窗口是指程序運行後,顯示信息的那一部分。對應的類是CXXXView(XXX表示項目名稱)類,CXXXView類是派生於CView類,而CView類又派生於CWnd類。他們的繼承關係可以通過查找類的定義來查看繼承關係。視圖類CView,擁有窗口的客戶區域,負責顯示文檔數據,接受用戶的輸入,提供文檔與用戶的通信。視類窗口只是主框架窗口中空白的部分。

主框架窗口

主框架窗口是指程序運行後,程序的整個界面。對應的類是CMainFrame,CMainFrame類派生於CFrameWnd類,而CFrameWnd類又又派生於CWnd類。主框架窗口就是整個應用程序外框所包括的部分,包括了圖3-1-1的全部內容。

框架窗口是視類窗口的一個父窗口(這裏暫時記住結論,各個窗口之間的關係會在後面的章節中單獨討論,目前還只針對初學者),他們之間的關係如圖3-1-1所示:


圖3-1-1  主框架窗口和視窗口之間的關係

文檔

文檔類CDcoument負責維護應用程序所需要的數據,提供一系列可對這些數據進行操作的方法,並且能夠爲視圖提供所需的數據。

新建一個MFC單文檔應用程序,項目名稱爲SDITest。項目結構示意圖如圖3-1-2所示:


圖3-1-2 MFC單文檔程序結構示意圖


上圖中可以看到SDITest程序中還有一個CSDITestDoc類,它派生於CDocument類,CDocument類的基類是CCmdTarget,而CCmdTarget又派生於CObject類,從而可知這個CSDITestDoc類不是一個窗口類,實際上是一個文檔類。

MFC提供的文檔/視(Document/View)結構,其中文檔是指CDocument類,視類是指CView類。Microsoft在設計基礎類庫時,考慮到要把數據本身與它的顯示分離開,於是就採用文檔類和視類結構來實現這一想法。數據的存儲和加載由文檔類來完成,數據的顯示和修改則由視類完成,從而把數據的管理和顯示方法分離開來。文檔/視類結構是MFC程序的一個重點,在後面的中級部分會詳細地介紹這部分內容。這裏希望大家能夠有一個初步的印象。

下面再介紹一下MFC單文檔程序是如何將文檔類對象、框架對象、視類對象組織在一起的。還是以SDITest項目爲例,在源文件SDITest.cpp中找到CSDITestApp類的InitInstance函數定義,有下面這一段代碼:

// 註冊應用程序的文檔模板。文檔模板將用作文檔、框架窗口和視圖之間的連接
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CSDITestDoc),
    RUNTIME_CLASS(CMainFrame),       // 主 SDI 框架窗口
    RUNTIME_CLASS(CSDITestView)
);
if (!pDocTemplate)
    return FALSE;
AddDocTemplate(pDocTemplate);

從上面的代碼段中可以看到其中定義了一個單文檔模板對象指針pDocTemplate,這個對象把文檔對象、框架對象、視類對象有機地組織在一起,形成了一個有機的整體,程序接着利用AddDocTemplate函數把這個單文檔模板添加到文檔模板中,從而把這三個類組織爲一個整體。

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