MFC的Document/View结构能够将管理数据的程序代码负责数据显示的程序代码分离出来。主要包括这样几个类:CDocManager,CDocTemplate,CDocument,CView,CFrameWnd。在介绍之前源码如下:
CDocManager类的部分定义
CDocTemplate类的部分定义
CSingleDocTemplate /CMultiDocTemplate 类的部分定义
CDocument类的部分定义
CView类的部分定义
CFrameWnd类的部分定义
App/Frame/View/CDoucument的关系如图:
下面是文字整理:
1.CWinApp拥有一个对象指针:CDocManager* m_pDocManager.
2.CDocManager拥有一个指针链表CPtrList m_templateList,用来维护一系列的Document Template。一个程序若支持两“种”文件类型,就应该有两份Document Template,应用程序应该在CMyWinApp::Instance中以AddDocTemplate将这些Document Templates加入到CDocManager所维护的链表之中。
3.CDocTemplate拥有三个成员变量,分别是Document,View,Frame,的CRuntimeClass的指针,另有一个成员变量m_nIDResoure,用来表示Document显示时应该采用的UI对象,这四份数据应该在CMyWinApp::InitInstance函数构造CDocTemplate时指定,成为构成函数的参数。当使用者欲打开一份文件时(通常接着【FILE/OPEN】或【FILE/NEW】),CDocTemplate可以借着CRuntimeClass指针动态创建响应的对象。
4.CDocument有一个成员变量CDocTemplate* m_pDocTemplate,回指DocTemplate;另一个成员变量CPtrList viewList,表示它可以同时维护一些列的Views.
5.CFrameWnd有一个成员变量CView* m_pViewActive,指向当前活动的View.
6.CView有一个成员变量CDocument* m_pDocument,指向相关的Document.
从一个视图类取得另一视图类的指针可以这样。