1. 程式人生 > >MFC的單文件檢視結構(摘錄)

MFC的單文件檢視結構(摘錄)

  文件

       文件物件用於管理和維護資料,包括儲存資料、取出資料以及修改資料等操作,在資料被修改以後,文件可以通知其對應的所有檢視更新顯示。

   檢視

       檢視物件將文件中的資料視覺化,負責從文件物件中取出資料顯示給使用者,並接受使用者的輸入和編輯,將資料的改變反映給文件物件。檢視充當了文件和使用者之間媒介的角色。

   框架

       一個文件可能有多個檢視介面,這就需要有框架來管理了。框架就是用來管理文件和檢視的。框架視窗是應用程式的主視窗,應用程式執行時會先建立一個最頂層的框架視窗。檢視視窗是沒有選單和邊界的子視窗,它必須包含在框架視窗中,即置於框架視窗的客戶區內。

  文件模板

       文件模板中存放了與文件、檢視和框架相關的資訊。應用程式通過文件模板建立文件物件、框架視窗物件和檢視物件。另外,文件、檢視和框架之間的關係也是由文件模板來管理的。

各個物件之間的關係

      1. 應用程式物件儲存了一個文件模板的列表。在任何物件中呼叫全域性函式AfxGetApp都可以獲得應用程式物件的指標。通過呼叫CWinAppEx::GetFirstDocTemplatePosition、CWinAppEx::GetNextDocTemplate函式可以遍歷所有的文件模板。

       2. 文件模板物件用於維護文件、檢視和框架視窗的對映關係,它包含有一個已開啟文件的列表。我們可以通過呼叫CDocTemplate::GetFirstDocPosition、CDocTemplate::GetNextDoc來遍歷該文件模板對應的所有文件。

       3. 框架視窗物件中包含有指向當前活動檢視物件的指標。AfxGetApp()->m_pMainWnd即為主框架視窗物件的指標。我們可以通過呼叫CFrameWndEx::GetActiveView來獲取當前活動檢視物件的指標,並且使用CFrameWndEx::GetActiveDocument函式可以獲得當前活動檢視對應的文件。

       4. 文件物件中維護著該文件的檢視列表,以及建立該文件的文件模板物件的指標。我們可以通過呼叫CDocument::GetFirstViewPosition,CDocument::GetNextView來遍歷該文件關聯的所有檢視,呼叫CDocument::GetDocTemplate獲取建立該文件的文件模板物件的指標。

       5. 檢視是框架視窗的子視窗,它儲存有指向對應的文件物件的指標。我們可以通過呼叫CView::GetParentFrame獲取其所屬的框架視窗物件的指標,呼叫CView::GetDocument獲取該檢視對應的文件物件的指標。

文件和檢視的關係

       應用程式可以是單文件程式也可以是多文件程式。單文件程式中主框架視窗和文件框架視窗重合,而多文件程式的主框架視窗中有客戶視窗,客戶視窗中又包含了多個文件框架視窗。

       文件和檢視是一對多的關係。一個文件可以對應多個檢視,例如在Word中一個文件有普通檢視、大綱檢視、Web版式檢視、閱讀版式檢視等多種檢視。而一個檢視只能屬於一個文件。最簡單的應用程式是單文件單檢視程式,除此之外還有單文件多檢視程式、多文件程式等。

       每個文件物件都儲存著一個檢視列表,可以通過CDocument::AddView函式新增檢視,通過CDocument::RemoveView函式刪除檢視,在資料發生變化時呼叫CDocument::UpdateAllViews函式更新所有檢視。