《visual c++程序设计教程》第七章框架窗口、文档和视图

上传人:mg****85 文档编号:49495619 上传时间:2018-07-29 格式:PPT 页数:80 大小:364KB
返回 下载 相关 举报
《visual c++程序设计教程》第七章框架窗口、文档和视图_第1页
第1页 / 共80页
《visual c++程序设计教程》第七章框架窗口、文档和视图_第2页
第2页 / 共80页
《visual c++程序设计教程》第七章框架窗口、文档和视图_第3页
第3页 / 共80页
《visual c++程序设计教程》第七章框架窗口、文档和视图_第4页
第4页 / 共80页
《visual c++程序设计教程》第七章框架窗口、文档和视图_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《《visual c++程序设计教程》第七章框架窗口、文档和视图》由会员分享,可在线阅读,更多相关《《visual c++程序设计教程》第七章框架窗口、文档和视图(80页珍藏版)》请在金锄头文库上搜索。

1、第7章 框架窗口、文档和视图7.1 应用程序组成结构1单文档应用程序(Single Document Interface,SDI)在单文档界面程序中,用户在同一时刻只能操作一个文 档,如记事本程序。在这些应用程序中,打开文档时会自 动关闭当前打开的活动文档,若文档修改后尚未保存,会 提示是否保存所做的修改。因为一次只开一个窗口,因此 不像WORD那样需要一个窗口菜单。单文档应用程序一般 都提供一个“文件”菜单,在该菜单下有一组命令,用于新 建文档、打开已有文档、保存或另存为等。这类程序相对 比较简单,常见的应用程序有终端仿真程序和一些工具程 序。n2多文档应用程序(Multiple Docum

2、ent Interface,MDI)n 在多文档界面应用程序中,允许同时操作多个文档,如 Microsoft Word。可以打开多个文件(同时也就为每个文件 打开一个窗口),可以通过切换活动窗口激活相应的文档进 行编辑。多文档应用程序也提供一个“文件”菜单,用于新建 、打开、保存文档。与单文档应用程序不同的是,它往往还 提供一个“关闭”菜单项,用于关闭当前打开的文档。多文档 应用程序还提供一个“窗口”菜单,管理所有打开的子窗口, 包括对子窗口的新建、关闭、层叠、平铺等。关闭一个窗口 时,窗口内的文档也被自动关闭。n3基于对话框的应用程序(Dialog based Application)n 基

3、于对话框的应用程序非常简单,由应用程序类、 对话框类(可以作为其它控件的容器)构成。它的生 命周期可概括为:通过应用程序类的InitInstance()函 数,构造一个模式对话框对象;调用DoModal函数, 让基于对话框的应用程序像对待普通对话框一样接收 和分配消息;用户退出对话框后,程序也就随之结束 。常见的基于对话框的应用程序有计算器等(以对话 框为容器布局的程序)。7.1.1 CMainFrame类和窗口nMFC应用程序主要由3部分组成:窗口、文档和视 图。其中窗口是整个应用程序的载体,也是应用程 序不可缺少的部分。n窗口也叫框架窗口,它可以分为两类:一类是主框 架窗口(也叫主窗口),

4、另一类是子框架窗口(也 叫子窗口)。在MFC应用程序中,框架( Framework)是应用程序所应具备的软件模块按一 定的结构组成的集合。框架窗口可以理解为框架的 可视化显示形式。n主框架窗口是应用程序放置在桌面( DeskTop)上的那个窗口,每个应用程序只 能有一个主窗口,主窗口的标题栏上通常显 示应用程序的名称。子框架窗口是应用程序 主框架窗口内的子窗口,它占据了主框架窗 口客户区的部分或全部。视图是子框架窗口 内的子窗口,它占据了子框架窗口客户区的 部分或全部。n图7-1标明了多文 档应用程序中主框 架窗口、子框架窗 口和视图之间的关 系。由于单文档应 用程序没有子框架 窗口,所以可以

5、认 为视图充满了整个 主框架窗口。n使用MFC AppWizard创建单文档应用程序后 ,包含主框架窗口类的文件分别为 MainFrm.h和MainFrm.cpp。主框架窗口类是 由CFrameWnd派生而来的,类名为 CMainFrame。而对于多文档应用程序,主 框架窗口由CMDIFrameWnd派生。nCMainFrame类有4个重要的函数:AssertValid、Dump、 OnCreate和PreCreateWindow。这4个函数都是由应用程序向 导自动声明和定义的,无须人为干预,不过了解它们的作用 还是非常有必要的,在需要的情况下,用户还可以修改它们 以达到预定效果。它们各自的功

6、能如下:n(1)AssertValid 函数用来诊断CMainFrame对象的有效性。n(2)Dump 函数用来输出CMainFrame对象的状态信息。n(3)OnCreate 函数用来创建工具栏m_wndToolBar和状态 栏m_wndStatusBar,而在视图窗口中是由基类CFrameWnd 的成员函数OnCreate通过调用OnCreateClient函数创建的。n(4)PreCreateWindow 函数是一个虚函数。如果要创建一 个非默认风格的窗口,可以重载这个函数,在函数中通过修 改Createstruct结构参数来改变窗口类、窗口风格、窗口大小 和位置等。7.1.2 CDoc

7、ument类和文档nCDocument类是CCmdTarget类 的派生类,其派生关系如图 74所示。CDocument类为用 户定义的文档类提供了基本的 函数功能,它支持标准操作, 如创建、装载、保存等。一个 应用程序可以支持多种类型的 文档,每种类型的文档都通过 一个文档模板对象建立与各自 视图的联系。n不论是SDI应用程序还是MDI应用程序,文 档类都是从CDocument类派生出来的。在文 档/视图结构中,文档类的主要任务通常是 对数据进行管理和维护,数据将保存在文档 类的成员变量中,视图通过对这些变量的访 问来获取或返回数据,并能通过这种方式来 更新并显示数据。n从CDocument

8、类派生文档类的步骤如下:n(1)为每一个文档类型从 CDocument类(当 然也可以是其他 CDocument类的派生类)派 生一个相应的文档类。n(2)为文档类添加成员变量。这些成员变量 用来保存文档的数据,其他对象(如与文档相 关联的视图)直接或间接地访问这些成员变量 以读取或更新文档的数据。n(3)重载Serialize成员函数,实现文档数据的 序列化。7.1.3 CView类和视图nCView类是CWnd 类的派生类,其派 生关系如图7-5所 示。CView类是 MFC中一个基本的 类,也是其他MFC 视图类和用户视图 派生类的基类。n视图窗口用来显示文档中的数据,并根据视 图对象提

9、供的基本功能,指定用户使用什么 方式查看文档数据,接受用户对数据的交互 操作(包括选择和编辑),并将更改后的数 据回传给文档。视图被附加到文档中并在文 档和用户之间充当媒介,它可以在屏幕上呈 现文档的数据,并将用户输入解释为对文档 的操作,还可以为打印和打印预览呈现图像 。n在MFC类库的层次位置中,CView类是从CWnd类下派生的, 掌握这个继承关系对用户来说是很有用的。例如,由于所有 的从CView类派生的类也都是由CWnd类间接派生的,因此这 些类具有CWnd的所有功能,如创建、移动、显示和隐藏窗 口等,并且CView类可以接收任何Windows消息。nCView类只提供了基础框架,在

10、MFC中派生了CView类的许多 子类,为不同的应用提供了强大支持。这些视图类都不是直 接派生于CView类,而是派生于CView的子类CCtrlView。 CCtrlView类的派生类对应于Windows通用控件,提供了与通 用控件相对应的功能。下面简单地介绍一下视图类各派生类 的情况。n1.CEditView 类nCEditView类主要用来支持类似编辑控件所要实现的 功能,常见的文本操作基本上都是由该类支持实现 的。n如果希望有一个具有简单编辑功能或附加功能的编 辑窗口,就可以构造一个CEditView类型的对象。一 个CEditView对象可以占有一个窗体的整个用户区。 用户也可以通过

11、从CEditView中派生自己的类来增加 或改变基本功能,并可以声明能加入到文档模板中 的类。n2.CTreeView 类nCTreeView类主要提供对一些树形控件所实现的功 能的支持。它可以使数据的显示方式更富于变化。n3.CListView 类nCListView类与CTreeView类类似,不同之处在于它 提供了一种简捷地实现数据的不同显示方式的途径 ,为数据组织提供了多种手段。n4.CRichEditView 类nCRichEditView类主要提供对Rich文本操作的支持 。Rich文本是既可以为文本,也可以为图形图像的 一种特殊格式的文本。n5.CScrollView 类nCSc

12、rollView类的主要功能是提供视图的滚动显示 。需要注意的是,以上介绍的几个类都是间接派 生于CView类,而该类直接继承至CView类,这就 决定了其动作的特殊性。7.1.4 框架窗口、文档和视图 的关系n文档/视图结构是MFC应用程序中最基本的程序结构 ,它适用于大多数Windows应用程序。文档与视图 完成了程序的大部分功能,它们是MFC应用程序的 核心。n由MFC创建的应用程序的主线程序体现在应用类中 ,而应用类通过文档模板类将文档类、窗口类( SDI中的主窗口类或MDI中的子窗口类)、视图类联 系在一起,组成一个有机整体,共同完成程序设计 任务。单文档模板类CSingleDocT

13、emplate和多文档 模板类CMutiDocTemplate均由CDocTemplate类派 生。单文档模板类支持单文档应用程序,多文档模 板类支持多文档应用程序。n应用类CWinApp通过一个内部类 CDocManager来管理文档模板类。CWinApp 类成员变量m_pDocManager是指向 CDocManager类对象的指针。在 CDocManager类中定义的指针链表,其每项 都是一个指向文档模板对象的指针。实际上 ,应用类通过其链表成员管理应用程序的所 有文档模板对象。n文档对象用来保存和管理数据,视图对象用 于数据交互,应用程序框架用来管理不同文 档显示界面。例如,程序设计要

14、求用数据网 格显示二维数据,同时还要求用图形显示二 维数据,即这些数据来自同一文档,但以不 同的视图方式显示。在这种情况下可以用框 架中的文档模板把一个文档及两个视图组合 在一起。n在程序运行时,CWinApp将创建一个CFrameWnd 框架窗口实例,而框架窗口将创建文档模板,然 后由文档模板创建文档实例和视图实例,并将两 者关联起来。一般来讲,用户只需对文档和视图 进行操作,框架的各种行为已经被MFC安排好而 不需要人为干预,这也是MFC设计文档/视图结构 的本意,让用户将注意力放在完成任务上,而从 界面编写中解放出来。文档/视图结构的数据交互 如图7-6所示,两者的关系如图7-7所示。图

15、7-6 文档-视图结构的数据交互图7-7 文档与视图的关系 n框架窗口、文档和视图之间的关系可以表述 为:文档和视图之间是一对多的关系,每个 视图和框架窗口是一对一的关系。n框架窗口、文档和视图三者之间是相互关联 、相互协调的,彼此都包含了指向对方的指 针。它们之间的联系是通过文档模板的构造 函数来实现的。下面介绍在程序中如何得到 各种对象的指针。n(1)全局函数AfxGetApp()可以得到CWinApp应用程序类指针,而 AfxGetApp()-m_pMainWnd就是框架窗口CFrameWnd的指针。n(2)在框架窗口中,CFrameWnd:GetActiveDocument()得到当前

16、 活动文档指针。n(3)在框架窗口中,CFrameWnd:GetActiveView()得到当前活动 视图指针。n(4)在视图中,CView:GetDocument()用于检索指向文档类的指 针。n(5)在文档中,CDocument:GetFirstViewPosition()和 CDocument:GetNextView()用来遍历所有和文档关联的视图。n(6)在文档中,CDocument:GetDocTemplate()用来得到文档模板 指针。n(7)在多文档界面中,CMDIFrameWnd:MDIGetActive()得到当前 活动的MDI子窗口。7.2 文档n文档(Document)是MFC应用程序中所处理 数据的集合,包括文本、图形、图像和表格 等类型。一个文档对应于用户当前打开的一 个文件。文档的主要作用是把数据处理从用 户界面的管理中分离出来,集中处理数据, 同时提供与视图交互的接口。7.2.1 数据成员n数据成员包括成员变量和成员函数。 CDocument类为用户定义的文档类提供了基 本的函数功能。nCDocument支

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号