MFC浅析(2) 文档视图结构中文档操作流程

类别:VC语言 点击:0 评论:0 推荐:
文档视图结构中文档操作流程

文档视图结构中文档操作流程

FMD(http://www.fmdstudio.net)

一基本架构

一个程序可以看作是建立在对文档进行处理的基础上的, 而程序可处理的文档类型有可能有多种,同时每种文档 又可能同时被打开多个。每个文档又可分为数据部分和 表现部分。

基于这种认识,MFC文档视图框架结构将各 功能模块总结为对象,用相互关联的这些对象类来建立 应用程序.

①文档类型管理

CWinApp代表程序,它可处理多种类型的文档,这样,就 必须有一个存储管理文档类型的内部成员,这个成员就是

CDocManager * m_pDocManager

CDocManager负责管理文档类型

CDocManager内部用

CPtrList m_templateList;(指针链表)

记录文档类型

②文档类型实现

CDocTemplate(文档模板)代表具体的文档类型

一个程序所能处理的文档类型,对对应各自的文档模板

这些模板对象的指针被记录在m_templateList,并且由m_pDocManager管理

③文档模板的实现

对于某一种文档,其内部数据结构,及外部表现形式,及针对它的操作命令都相对固定,因此 文档模板有三个构成部分,文档的数据,用CDoucument管理;文档的表现形式,CView表示;文档 在窗口系统中的容器,及菜单,工具条等命令形式则由CFrameWnd管理。必要时,同一文档可能需 要多种表达,即一个CDocument可能关联几个CView,但模板声明时,只考虑一个文档对应一个视图。

这些信息被记录在其三个成员中

CRuntimeClass* m_pDocClass; // class for creating new documents

CRuntimeClass* m_pFrameClass; // class for creating new frames

CRuntimeClass* m_pViewClass; // class for creating new views

一各文档模板,对应一种文件类型,而这一类型的文件则可以有很多,这些对应的文件将记录在

CPtrList m_docList;

另外,文档模板也包含了该文档类型所对应的资源,如菜单,标题,图标等等信息

二 文档类型的建立

程序执行之初,(InitInstance 中)将建立文档类型链表

依次建立多个文档类型(CCMultiDocTemplate),再一一添加(AddDocTemplate)到CWinApp的文档类型列表m_templateList中 这样就建立了一个文件类型表,文件的新建,打开都将首先查找这个文件类型链表,找出文档的类型,得到文档模板, 由文档模板得到文档应有的数据结构、文档的图形表述,及操作等等。

三 文档的新建

①界面 命令ID_FILE_NEW发出

CWinApp::OnFileNew()处理

交由CDocManager * m_pDocManager(文档类型管理)处理

②CDocuManager查看文件类型列表,如过程序支持多种类型文档,给出一个类型选择机会。

若文档类型列表中只有一种文档类型,直接选用这种类型。

③找到文档模板后,将调用文档模板的OpenDocumentFile(..)成员,传入的参数为NULL,表示新建

i . OpenDocumentFile首先将首先建立文档的数据部分:

CDocument* pDocument = CreateNewDocument();

这将按照m_pDocClass所记录的CDocument类建立其实际数据对象。

数据对象建立后,将其添加到CPtrList m_docList中,记录下这一文档模板对应打开的所有实际文件。 同时,CDocument也有一个列表CPtrList m_viewList; 用于记录文档对象所对应的(CView)视图,视图 容许有多个(同样的数据,可能有需要不同的表达形式)。

ii. 为数据建立其表现形式的容器,即框架窗口

CFrameWnd* pFrame = CreateNewFrame(pDocument, NULL);

根据文档模板记录的框架类m_pFrameClass建立框架对象。

iii. 建立框架对象的同时,CView(数据的表现形式,数据图像)的类型m_pViewClass将作为参数传给框架对象

CCreateContext context;

context.m_pNewViewClass = m_pViewClass;

然后框架对象建立其实际的窗口

if

本文地址:http://com.8s8s.com/it/it3392.htm