MFC之文档与视图

文档视图结构是使用MFC开发基于文档的应用程序的基本框架,最主要的思想是数据的管理和显示分离。使用文档类管理数据,视图类负责数据的显示,结合数据串行化存储机制,使得开发基于文档的应用程序更加方便。


1.文档-视图结构

文档类CDocument负责维护应用程序所需要的数据,提供一系列可对这些数据进行操作的方法,并且能够为视图提供所需要的数据。视图类CView拥有窗口的客户区域、负责显示文档数据、接收用户输入,提供文档与用户的通信。


单文档与多文档:

        使用AppWizard创建SDI与MDI的过程相似,主要区别是创建SDI时不生成CChildFrame类,CMainFrame类的基类为CMainWnd;而在创建MDI时会生成两个框架类,一个是CMainFrame类,由CMDIFrameWnd类派生而来,另一个是CChildFrame类,由CMDIChildWnd类派生而来。

        在SDI的CMainFrame对象不但构成了应用程序框架,也包含了视图对象。在MDI中,CMainFrame对象是在应用程序类的InitInstance中被创建,而视图则被包含在CChildFrame对象中。

        单文档(SDI)应用程序在一个主框架上只有一个子框架窗口,多文档(MDI)应用程序在一个主框架上可以有多个子框架窗口。


文档与视图体系:

        一个文档可以对应于多个视图,而一个视图只能唯一的对应一个文档。文档与视图的结构优势在于数据的管理与显示分离,数据总是要以一定的结构来存储,而视图负责数据呈现。数据往往有多种呈现方式,例如一份报表,可以用表格形式呈现,也可以用图表形式呈现。根据不同的需求以不同的形式呈现,这就是视图的特性。

        在使用文档视图体系开发应用程序过程中,涉及的不仅仅是文档与视图。总体来说,涉及4个部分:文档模板、文档、视图和框架窗口。


一个文档可以与多个视图关联,每一个视图仅仅是与其相关联文档数据的一种表现形式。MFC的CView类是所有视图类的基类,主要有两大功能:

(a)将与其相关联文档的数据呈现给用户。

(b)接受用户对数据的修改,并反馈给文档。

在文档视图体系中,文档负责数据的管理,视图负责数据的显示,框架窗口负责管理这些界面。框架窗口有两种模式:当文档窗口(SDI)和多文档窗口(MDI)。在SDI环境下,同时最多只能打开一个框架窗口,而在MDI环境下则没有这个限制。


CSingleDocTemplate

CObject
CCmdTarget
CDocTemplate
CSingleDocTemplate

CSingleDocTemplate类定义了一个文档模板用于实现单文档界面(SDI)。一个SDI应用程序使用主框架窗口来显示一个文档;一次只能打开一个文档。
一个文档模板定义了类的三个类型之间的关系:
·一个从CDocument派生而来的文档类。
·一个视类,用来显示来自上面提到的文档类的数据。你可以从CView,CScrollView,CFormView,或CEditView派生这个类。(你也可以直接使用CEditView。)
·一个框架窗口类,用来包容视。对于一个SDI文档模板,你可以从CFrameWnd派生这个类;如果你不需要定制主框架窗口的行为,你可以直接使用CFrameWnd,而不派生你自己的类。
一个SDI应用程序通常支持一种类型的文档,因此它只有一个CSingleDocTemplate模板。一次只打开一个文档。
除了CSingleDocTemplate的构造函数,你不需要调用它的任何其它成员函数。框架在内部处理CSingleDocTemplate对象。


CMultiDocTemplate

CObject
CCmdTarget
CDocTemplate
CMultiDocTemplate

MultiDocTemplate类定义了实现多文档界面(MDI)的文档模板。MDI应用使用主框架窗口作为工作区,用户能够在其中打开零个或多个文档框架窗口,每个框架窗口都将显示一个文档。如果需要MDI更详细的描述,请参阅“Windows软件设计接口指南”。
一个文档模板定义了三种类型类之间的关系:
·从CDocument派生的文档类。
·显示上面列出文档类数据的视图类。可以从CView, CScrollView, CFormView,或 CEditView派生该类(也可以直接使用CEditView)。
·包含视图的框架窗口类。对于MDI文档模板,可以从CMDIChildWnd中派生该类,或者若不必定制文档框架窗口的行为,可以直接使用CMDIChildWnd而不必派生自己的类。
MDI应用能够支持多种类型的文档,并且可以同时打开不同类型的文档。应用拥有它支持的每种文档类型的文档模板。例如,若MDI应用支持电子表格或文本文档,那么应用就拥有两个CMultiDocTemplate 对象。
当用户创建一个新文档时,应用使用文档模板。若应用支持多种类型的文档,那么框架就将从文档模板中获取所支持的文档类型的名称,并在File New对话框的列表中进行显示。一旦用户选择了一种文档类型,那么应用就将创建一个文档类对象、框架窗口对象和视图对象,并互相附加给对方。
不必调用除构造函数之外的任何CMultiDocTemplate成员函数。框架将在内部处理CMultiDocTemplate 对象。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值