C++ 编程 第十章 文档视图结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
视图1 文档
视图2
北京源智天下科技有限公司
1-4
联系方式:www.rzchina.net
文档视图应用程序
Visual C++ 6.0为用户提供了两种基于文档视图类型的应用 为用户提供了两种基于文档视图类型的应用 程序:单文档界面( 程序 : 单文档界面 ( SDI)程序和多文档界面 ( MDI)程序 ) 程序和多文档界面( ) .
北京源智天下科技有限公司
1-3
联系方式:www.rzchina.net
文档和视图的关系
在文档视图结构中, 在文档视图结构中,文档是应用程序数据基本元素的集 它构成应用程序所使用的数据单元. 合,它构成应用程序所使用的数据单元.另外它还对数 据进行管理和维护, 据进行管理和维护,通常数据被保存在文档类的成员变 量中. 量中.视图给用户提供了与文档中的数据进行交互的界 它把用户输入的信息转化为对文档中数据的操作, 面,它把用户输入的信息转化为对文档中数据的操作, 将文档类的数据取出来,在屏幕上进行显示. 将文档类的数据取出来,在屏幕上进行显示.
北京源智天下科技有限公司
1-13
联系方式:www.rzchina.net
创建单文档视图应用程序
在AppWizard下,新建一个【MFC AppWizard[exe]】程 下 新建一个【 】 打开【 序,打开【MFC AppWizard-Step 1】对话框,在其中 - 】对话框, 选中【 选中【Single document】单选按钮和【 】单选按钮和【 Document/View arthitechure support?】复选框,如 】复选框, 不选中该复选框, 不选中该复选框,MFC AppWizard不会自动为文档视图 不会自动为文档视图 结构生成代码,如图10-11所示. 所示. 结构生成代码,如图 所示
北京源智天下科技有限公司
1-6
联系方式:www.rzchina.net
通常情况下,视图通过 通常情况下,视图通过GetDocument成员函数获得指向相 成员函数获得指向相 关联文档对象的指针, 关联文档对象的指针,并通过该指针调用文档类的成员 函数从文档中读取数据,并将数据显示在电脑屏幕上, 函数从文档中读取数据,并将数据显示在电脑屏幕上, 用户通过与视图的交互来查看数据并对其进行修改, 用户通过与视图的交互来查看数据并对其进行修改,如 所示. 图10-4所示. 所示
文档类
Biblioteka Baidu
变量和成员函数
视图类
查看修改
用户
北京源智天下科技有限公司
1-7
联系方式:www.rzchina.net
文档-视图相互作用的函数 文档 视图相互作用的函数
文档-视图( 文档 视图(Document-View)体系结构是 视图 )体系结构是MFC的一大 的一大 特色,它将数据的管理和显示隔离; 特色,它将数据的管理和显示隔离;文档对象是用来容 纳数据的, 纳数据的,而视图对象则是用来显示数据并且对数据进 行编辑. 行编辑. 在文档,视图和应用程序框架之间包含了一系列非常复 在文档, 杂的相互作用过程.为了了解这一过程, 杂的相互作用过程.为了了解这一过程,首先要熟悉有 关文档类和视图类中的几个重要的成员函数. 关文档类和视图类中的几个重要的成员函数.
GetDocument函数
文档类 视图类
UpdateAllViews函数
北京源智天下科技有限公司
1-11
联系方式:www.rzchina.net
单文档视图应用程序( 单文档视图应用程序(SDI) )
一个单文档界面应用程序只有一个窗口. 一个单文档界面应用程序只有一个窗口.如果应用程序 依赖于磁盘文件的文档,那么一次只能加载一个文档, 依赖于磁盘文件的文档,那么一次只能加载一个文档, 类似于Windows的记事本程序. 类似于 的记事本程序. 的记事本程序 当读者创建的是单文档界面应用程序时, 当读者创建的是单文档界面应用程序时,AppWizard 会自动地创建4个类 个类. 会自动地创建 个类.这4个类的类名构成与工程名有 个类的类名构成与工程名有 当工程名长度在一定范围内,则类名构成为" 关.当工程名长度在一定范围内,则类名构成为"C"+ 工程名+类的类型,如名称为Test的工程的四个类为: 工程名 类的类型,如名称为 的工程的四个类为: 类的类型 的工程的四个类为 CTestApp,CMainFrame,CTestView,CTestDoc , , , 它们分别为CWinApp类,CFrameView类, ,它们分别为 类 类 CDocument类和 类和CView类的派生类. 类的派生类. 类和 类的派生类 当工程名长度超过该长度时,或工程名为中文时,类名 当工程名长度超过该长度时,或工程名为中文时, 构成为" 构成为"CMy"+类的类型 +
北京源智天下科技有限公司
1-12
联系方式:www.rzchina.net
例如,名称为"单文档视图应用程序"的工程, 例如,名称为"单文档视图应用程序"的工程, AppWizard创建的四个类为:CMyApp,CMainFrame 创建的四个类为: 创建的四个类为 , ,CMytView,CMyDoc,它们分别表示 , ,它们分别表示CWinApp类, 类 CFrameView类,CDocument类和 类和CView类的派生类, 类的派生类, 类 类和 类的派生类 如图10-9所示. 所示. 如图 所示
北京源智天下科技有限公司
1-5
联系方式:www.rzchina.net
基本程序结构
文档视图结构是Microsoft为编程人员提供的一些类,以方便文件 为编程人员提供的一些类, 文档视图结构是 为编程人员提供的一些类 和窗口的创建,显示,保存等.总体来讲, 和窗口的创建,显示,保存等.总体来讲,采用文档视图结构 的应用程序主要由以下4部分组成. 的应用程序主要由以下 部分组成. 部分组成 文档类( ):负责应用程序数据的管理 文档类(CDocument):负责应用程序数据的管理.它是所有应 ):负责应用程序数据的管理. 用程序文档类的基类, 用程序文档类的基类,提供了文档类所需要实现的最基本功能 的支持,为文档对象与框架窗口对象, 的支持,为文档对象与框架窗口对象,视图对象等的交互提供 了基本框架. 了基本框架. 视图类( ):负责用户与文档之间的交互 视图类(CView):负责用户与文档之间的交互.它通过一个指 ):负责用户与文档之间的交互. 向其对应的文档对象的指针直接或间接地获取和修改文档中的 数据. 数据. 框架结构类( ):MFC应用程序的主框架是应用程序的 框架结构类(CFrame): ): 应用程序的主框架是应用程序的 主窗口,子框架则提供了一个视图窗口, 主窗口,子框架则提供了一个视图窗口,每个视图都能在其中 运行.此外,框架对象还可以处理应用程序菜单, 运行.此外,框架对象还可以处理应用程序菜单,状态栏和工 具栏,并接受视图中的命令消息. 具栏,并接受视图中的命令消息. 主应用程序类( ):负责程序的运行和处理程序与 主应用程序类(CWinApp):负责程序的运行和处理程序与 ): Windows之间的数据交互,并控制其他类. 之间的数据交互,并控制其他类. 之间的数据交互
第十讲: 第十讲:文档视图结构
杨章伟 e-mail:yang505412@163.com
北京源智天下科技有限公司
联系方式:www.rzchina.net
课程内容安排
文档视图结构概述 文档-视图相互作用的函数 文档 视图相互作用的函数 单文档-视图应用程序结构 单文档 视图应用程序结构 多文档-视图应用程序结构 多文档 视图应用程序结构 综合练习 思考和习题
北京源智天下科技有限公司
1-15
联系方式:www.rzchina.net
需要读者注意的是,多文档应用程序 需要读者注意的是,多文档应用程序MDI的框架窗口类也是 的框架窗口类也是 CMainFrame类,但它是由 类派生的, 类 但它是由CMDIFrameWnd类派生的, 类派生的 不是SDI程序中的 程序中的CFrameWnd类,其相应的文件也是 不是 程序中的 类 "MainFrame.h"和"MainFrame.cpp".而增加的文档 和 . 框架窗口类则是由CMDIChildWnd类派生的,其相应的 类派生的, 框架窗口类则是由 类派生的 文件为"ChildFrm.h"和 ChildFrm.cpp". 文件为"ChildFrm.h"和"ChildFrm.cpp".其工作区如 所示. 图10-17所示. 所示
北京源智天下科技有限公司
1-9
联系方式:www.rzchina.net
北京源智天下科技有限公司
1-10
联系方式:www.rzchina.net
视图与文档的交互流程如下: 视图与文档的交互流程如下: 当用户在视图中对文档数据进行编辑时, 当用户在视图中对文档数据进行编辑时,视图会调用其 自己的成员函数GetDocument来通知文档对象更新其 自己的成员函数 来通知文档对象更新其 内部数据; 内部数据; 当文档对象修改数据之后, 当文档对象修改数据之后,它会调用文档类的 UpdateAllViews成员函数,通知所有与之联系的视图 成员函数, 成员函数 进行强制更新显示,如图10-8所示. 所示. 进行强制更新显示,如图 所示
北京源智天下科技有限公司
1-8
联系方式:www.rzchina.net
GetDocument函数 函数
该函数是视图类中的一个成员函数, 该函数是视图类中的一个成员函数,可写为 CView::GetDocument.GetDocument函数返回的是指 . 函数返回的是指 向文档的指针, 向文档的指针,利用这个指针就可以访问文档类或其派 生类的成员函数及公共数据成员. 生类的成员函数及公共数据成员. 当AppWizard生成一个派生的 生成一个派生的CView类的时候,它同时也 类的时候, 生成一个派生的 类的时候 创建了一个特殊的typesafe(保护类型)的 创建了一个特殊的 (保护类型) GetDocument函数,读者可在工作区打开【ClassView 函数, 函数 读者可在工作区打开【 标签,单击打开视图类CView,可看到该函数,如图 】标签,单击打开视图类 ,可看到该函数, 10-7所示. 所示. 所示
北京源智天下科技有限公司
1-2
联系方式:www.rzchina.net
文档视图结构概述
文档视图结构是Visual C++ 6.0语言中使用 语言中使用MFC开发应 文档视图结构是 语言中使用 开发应 用程序的基本框架.在这个框架中, 用程序的基本框架.在这个框架中,数据的维护及显示 是由两个不同但又彼此紧密相关的类——文档类和视图 是由两个不同但又彼此紧密相关的类 文档类和视图 类分别负责的. 类分别负责的. 文档和视图是MFC应用程序的核心.Windows应用程 文档和视图是 应用程序的核心. 应用程 应用程序的核心 序除了处理数据外,还要将数据显示出来. 序除了处理数据外,还要将数据显示出来.在 Windows界面下,数据的显示并非使用 界面下, 标准C++ 界面下 数据的显示并非使用ANSI标准 标准 中的cin或 指令. 采用了两个相互独立的类: 中的 或cout指令.MFC采用了两个相互独立的类: 指令 采用了两个相互独立的类 CDocument类和 类和CView类来负责数据的存储与显示. 类来负责数据的存储与显示. 类和 类来负责数据的存储与显示
北京源智天下科技有限公司
1-14
联系方式:www.rzchina.net
多文档视图应用程序( 多文档视图应用程序(MDI) )
一个多文档界面应用程序拥有多个子窗口. 一个多文档界面应用程序拥有多个子窗口.每个窗口单独对 应于一个文档,类似于Microsoft Word程序. 程序. 应于一个文档,类似于 程序 与单文档应用程序不同的是, 与单文档应用程序不同的是,当读者创建的是多文档界面应 用程序时, 的会自动创建五个类, 用程序时 , AppWizard的会自动创建五个类 , 其类的命 的会自动创建五个类 名规则与单文档应用程序的规则相同. 例如, 名规则与单文档应用程序的规则相同 . 例如 , 创建工程 Test 后 , MFC AppWizard 生 成 的 五 个 类 分 别 为 : CTestApp, CMainFrame, CChildFrame, CTestDoc , , , , CTestView, 分别为CWinApp类 , CMDIFrameWnd , 分别为 类 类和CView类的派 类,CMDIChildWnd类,CDocument类和 类 类和 类的派 生类. 生类.
视图2
北京源智天下科技有限公司
1-4
联系方式:www.rzchina.net
文档视图应用程序
Visual C++ 6.0为用户提供了两种基于文档视图类型的应用 为用户提供了两种基于文档视图类型的应用 程序:单文档界面( 程序 : 单文档界面 ( SDI)程序和多文档界面 ( MDI)程序 ) 程序和多文档界面( ) .
北京源智天下科技有限公司
1-3
联系方式:www.rzchina.net
文档和视图的关系
在文档视图结构中, 在文档视图结构中,文档是应用程序数据基本元素的集 它构成应用程序所使用的数据单元. 合,它构成应用程序所使用的数据单元.另外它还对数 据进行管理和维护, 据进行管理和维护,通常数据被保存在文档类的成员变 量中. 量中.视图给用户提供了与文档中的数据进行交互的界 它把用户输入的信息转化为对文档中数据的操作, 面,它把用户输入的信息转化为对文档中数据的操作, 将文档类的数据取出来,在屏幕上进行显示. 将文档类的数据取出来,在屏幕上进行显示.
北京源智天下科技有限公司
1-13
联系方式:www.rzchina.net
创建单文档视图应用程序
在AppWizard下,新建一个【MFC AppWizard[exe]】程 下 新建一个【 】 打开【 序,打开【MFC AppWizard-Step 1】对话框,在其中 - 】对话框, 选中【 选中【Single document】单选按钮和【 】单选按钮和【 Document/View arthitechure support?】复选框,如 】复选框, 不选中该复选框, 不选中该复选框,MFC AppWizard不会自动为文档视图 不会自动为文档视图 结构生成代码,如图10-11所示. 所示. 结构生成代码,如图 所示
北京源智天下科技有限公司
1-6
联系方式:www.rzchina.net
通常情况下,视图通过 通常情况下,视图通过GetDocument成员函数获得指向相 成员函数获得指向相 关联文档对象的指针, 关联文档对象的指针,并通过该指针调用文档类的成员 函数从文档中读取数据,并将数据显示在电脑屏幕上, 函数从文档中读取数据,并将数据显示在电脑屏幕上, 用户通过与视图的交互来查看数据并对其进行修改, 用户通过与视图的交互来查看数据并对其进行修改,如 所示. 图10-4所示. 所示
文档类
Biblioteka Baidu
变量和成员函数
视图类
查看修改
用户
北京源智天下科技有限公司
1-7
联系方式:www.rzchina.net
文档-视图相互作用的函数 文档 视图相互作用的函数
文档-视图( 文档 视图(Document-View)体系结构是 视图 )体系结构是MFC的一大 的一大 特色,它将数据的管理和显示隔离; 特色,它将数据的管理和显示隔离;文档对象是用来容 纳数据的, 纳数据的,而视图对象则是用来显示数据并且对数据进 行编辑. 行编辑. 在文档,视图和应用程序框架之间包含了一系列非常复 在文档, 杂的相互作用过程.为了了解这一过程, 杂的相互作用过程.为了了解这一过程,首先要熟悉有 关文档类和视图类中的几个重要的成员函数. 关文档类和视图类中的几个重要的成员函数.
GetDocument函数
文档类 视图类
UpdateAllViews函数
北京源智天下科技有限公司
1-11
联系方式:www.rzchina.net
单文档视图应用程序( 单文档视图应用程序(SDI) )
一个单文档界面应用程序只有一个窗口. 一个单文档界面应用程序只有一个窗口.如果应用程序 依赖于磁盘文件的文档,那么一次只能加载一个文档, 依赖于磁盘文件的文档,那么一次只能加载一个文档, 类似于Windows的记事本程序. 类似于 的记事本程序. 的记事本程序 当读者创建的是单文档界面应用程序时, 当读者创建的是单文档界面应用程序时,AppWizard 会自动地创建4个类 个类. 会自动地创建 个类.这4个类的类名构成与工程名有 个类的类名构成与工程名有 当工程名长度在一定范围内,则类名构成为" 关.当工程名长度在一定范围内,则类名构成为"C"+ 工程名+类的类型,如名称为Test的工程的四个类为: 工程名 类的类型,如名称为 的工程的四个类为: 类的类型 的工程的四个类为 CTestApp,CMainFrame,CTestView,CTestDoc , , , 它们分别为CWinApp类,CFrameView类, ,它们分别为 类 类 CDocument类和 类和CView类的派生类. 类的派生类. 类和 类的派生类 当工程名长度超过该长度时,或工程名为中文时,类名 当工程名长度超过该长度时,或工程名为中文时, 构成为" 构成为"CMy"+类的类型 +
北京源智天下科技有限公司
1-12
联系方式:www.rzchina.net
例如,名称为"单文档视图应用程序"的工程, 例如,名称为"单文档视图应用程序"的工程, AppWizard创建的四个类为:CMyApp,CMainFrame 创建的四个类为: 创建的四个类为 , ,CMytView,CMyDoc,它们分别表示 , ,它们分别表示CWinApp类, 类 CFrameView类,CDocument类和 类和CView类的派生类, 类的派生类, 类 类和 类的派生类 如图10-9所示. 所示. 如图 所示
北京源智天下科技有限公司
1-5
联系方式:www.rzchina.net
基本程序结构
文档视图结构是Microsoft为编程人员提供的一些类,以方便文件 为编程人员提供的一些类, 文档视图结构是 为编程人员提供的一些类 和窗口的创建,显示,保存等.总体来讲, 和窗口的创建,显示,保存等.总体来讲,采用文档视图结构 的应用程序主要由以下4部分组成. 的应用程序主要由以下 部分组成. 部分组成 文档类( ):负责应用程序数据的管理 文档类(CDocument):负责应用程序数据的管理.它是所有应 ):负责应用程序数据的管理. 用程序文档类的基类, 用程序文档类的基类,提供了文档类所需要实现的最基本功能 的支持,为文档对象与框架窗口对象, 的支持,为文档对象与框架窗口对象,视图对象等的交互提供 了基本框架. 了基本框架. 视图类( ):负责用户与文档之间的交互 视图类(CView):负责用户与文档之间的交互.它通过一个指 ):负责用户与文档之间的交互. 向其对应的文档对象的指针直接或间接地获取和修改文档中的 数据. 数据. 框架结构类( ):MFC应用程序的主框架是应用程序的 框架结构类(CFrame): ): 应用程序的主框架是应用程序的 主窗口,子框架则提供了一个视图窗口, 主窗口,子框架则提供了一个视图窗口,每个视图都能在其中 运行.此外,框架对象还可以处理应用程序菜单, 运行.此外,框架对象还可以处理应用程序菜单,状态栏和工 具栏,并接受视图中的命令消息. 具栏,并接受视图中的命令消息. 主应用程序类( ):负责程序的运行和处理程序与 主应用程序类(CWinApp):负责程序的运行和处理程序与 ): Windows之间的数据交互,并控制其他类. 之间的数据交互,并控制其他类. 之间的数据交互
第十讲: 第十讲:文档视图结构
杨章伟 e-mail:yang505412@163.com
北京源智天下科技有限公司
联系方式:www.rzchina.net
课程内容安排
文档视图结构概述 文档-视图相互作用的函数 文档 视图相互作用的函数 单文档-视图应用程序结构 单文档 视图应用程序结构 多文档-视图应用程序结构 多文档 视图应用程序结构 综合练习 思考和习题
北京源智天下科技有限公司
1-15
联系方式:www.rzchina.net
需要读者注意的是,多文档应用程序 需要读者注意的是,多文档应用程序MDI的框架窗口类也是 的框架窗口类也是 CMainFrame类,但它是由 类派生的, 类 但它是由CMDIFrameWnd类派生的, 类派生的 不是SDI程序中的 程序中的CFrameWnd类,其相应的文件也是 不是 程序中的 类 "MainFrame.h"和"MainFrame.cpp".而增加的文档 和 . 框架窗口类则是由CMDIChildWnd类派生的,其相应的 类派生的, 框架窗口类则是由 类派生的 文件为"ChildFrm.h"和 ChildFrm.cpp". 文件为"ChildFrm.h"和"ChildFrm.cpp".其工作区如 所示. 图10-17所示. 所示
北京源智天下科技有限公司
1-9
联系方式:www.rzchina.net
北京源智天下科技有限公司
1-10
联系方式:www.rzchina.net
视图与文档的交互流程如下: 视图与文档的交互流程如下: 当用户在视图中对文档数据进行编辑时, 当用户在视图中对文档数据进行编辑时,视图会调用其 自己的成员函数GetDocument来通知文档对象更新其 自己的成员函数 来通知文档对象更新其 内部数据; 内部数据; 当文档对象修改数据之后, 当文档对象修改数据之后,它会调用文档类的 UpdateAllViews成员函数,通知所有与之联系的视图 成员函数, 成员函数 进行强制更新显示,如图10-8所示. 所示. 进行强制更新显示,如图 所示
北京源智天下科技有限公司
1-8
联系方式:www.rzchina.net
GetDocument函数 函数
该函数是视图类中的一个成员函数, 该函数是视图类中的一个成员函数,可写为 CView::GetDocument.GetDocument函数返回的是指 . 函数返回的是指 向文档的指针, 向文档的指针,利用这个指针就可以访问文档类或其派 生类的成员函数及公共数据成员. 生类的成员函数及公共数据成员. 当AppWizard生成一个派生的 生成一个派生的CView类的时候,它同时也 类的时候, 生成一个派生的 类的时候 创建了一个特殊的typesafe(保护类型)的 创建了一个特殊的 (保护类型) GetDocument函数,读者可在工作区打开【ClassView 函数, 函数 读者可在工作区打开【 标签,单击打开视图类CView,可看到该函数,如图 】标签,单击打开视图类 ,可看到该函数, 10-7所示. 所示. 所示
北京源智天下科技有限公司
1-2
联系方式:www.rzchina.net
文档视图结构概述
文档视图结构是Visual C++ 6.0语言中使用 语言中使用MFC开发应 文档视图结构是 语言中使用 开发应 用程序的基本框架.在这个框架中, 用程序的基本框架.在这个框架中,数据的维护及显示 是由两个不同但又彼此紧密相关的类——文档类和视图 是由两个不同但又彼此紧密相关的类 文档类和视图 类分别负责的. 类分别负责的. 文档和视图是MFC应用程序的核心.Windows应用程 文档和视图是 应用程序的核心. 应用程 应用程序的核心 序除了处理数据外,还要将数据显示出来. 序除了处理数据外,还要将数据显示出来.在 Windows界面下,数据的显示并非使用 界面下, 标准C++ 界面下 数据的显示并非使用ANSI标准 标准 中的cin或 指令. 采用了两个相互独立的类: 中的 或cout指令.MFC采用了两个相互独立的类: 指令 采用了两个相互独立的类 CDocument类和 类和CView类来负责数据的存储与显示. 类来负责数据的存储与显示. 类和 类来负责数据的存储与显示
北京源智天下科技有限公司
1-14
联系方式:www.rzchina.net
多文档视图应用程序( 多文档视图应用程序(MDI) )
一个多文档界面应用程序拥有多个子窗口. 一个多文档界面应用程序拥有多个子窗口.每个窗口单独对 应于一个文档,类似于Microsoft Word程序. 程序. 应于一个文档,类似于 程序 与单文档应用程序不同的是, 与单文档应用程序不同的是,当读者创建的是多文档界面应 用程序时, 的会自动创建五个类, 用程序时 , AppWizard的会自动创建五个类 , 其类的命 的会自动创建五个类 名规则与单文档应用程序的规则相同. 例如, 名规则与单文档应用程序的规则相同 . 例如 , 创建工程 Test 后 , MFC AppWizard 生 成 的 五 个 类 分 别 为 : CTestApp, CMainFrame, CChildFrame, CTestDoc , , , , CTestView, 分别为CWinApp类 , CMDIFrameWnd , 分别为 类 类和CView类的派 类,CMDIChildWnd类,CDocument类和 类 类和 类的派 生类. 生类.