单文档与多文档
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3. 文档模板 文档模板CDocTemplate类的功能 类的功能
在VC中,文档类,与文档类相关联的视图类以及为视图类提供显 中 文档类, 示的框架窗口都是由文档模板创建的. 示的框架窗口都是由文档模板创建的.每一种文档类型都有一种文档 模板与之相对应,文档模板负责创建和管理该文档类型的所有文档. 模板与之相对应,文档模板负责创建和管理该文档类型的所有文档.
方法 OnNewDocument() OnOpenDocument() OnSaveDocument() OnCloseDocument() CanCloseFrame() DeleteContents() ReleaseFile() SaveModified() sModified() IsModified () etModifiedFlag() SetModifiedFlag() GetFirstViewPosition() GetNextView()
16.3 CDocument类的派生类构造 类的派生类构造
构造CDocument类的派生类的基本步骤 类的派生类的基本步骤 构造 一般来说, 一般来说,从CDocument类派生自己的文档类所需的典型步骤为 类派生自己的文档类所需的典型步骤为 为每一个文档类型从CDocument类(当然也可以是其它 类 当然也可以是其它 为每一个文档类型从 CDocument类的派生类 派生一个相应的文档类. 类的派生类)派生一个相应的文档类 类的派生类 派生一个相应的文档类. 为文档类添加成员变量.这些成员变量用来保存文档的 为文档类添加成员变量. 数据,其它对象 如与文档相关联的视图 如与文档相关联的视图)直接或间接地访 数据,其它对象(如与文档相关联的视图 直接或间接地访 问这些成员变量来读取或更新文档的数据. 问这些成员变量来读取或更新文档的数据. 重载Serialize成员函数,实现文档数据的串行化. 成员函数,实现文档数据的串行化. 重载 成员函数
第16章 单文档与多文档 16章 wode banben
16.1.1单文档界面与多文档界面 单文档界面与多文档界面
SDI的应用程序 的应用程序 只有一个窗口 单文档界面(SDI) 单文档界面 多文档界面(MDI) 多文档界面 基于对话框的应用程序 MDI的应用程序每次 的应用程序每次 可以读写多个文件或 文档, 文档,可同时对多个 文档进行操作, 文档进行操作,可以 有多个子窗口
这一点与Windows消息 这一点与Windows消息 Windows 和控件通知消息不同, 和控件通知消息不同, 因为Windows Windows消息和控 因为Windows消息和控 件通知消息就只能被 窗口和视图处理. 窗口和视图处理.
文档பைடு நூலகம்视图结构的工作机制 文档 视图结构的工作机制
视图通过GetDocument 视图通过GetDocument 成员函数获得指向相关 联的文档对象的指针 通过该指针调用文 档类的成员函数来 从文档中读取数据
文档,框架窗口和视图的创建过程之间的先后顺序为: 文档,框架窗口和视图的创建过程之间的先后顺序为: 创建文档 → 创建框架窗口 → 创建视图
文档,视图和框架三者之间是相互关联,相互协调的, 文档,视图和框架三者之间是相互关联,相互协调的,彼此都包含了 指向对方的指针. 指向对方的指针.它们之间的联系是通过文档模板的构造函数来实现 文档模板的构造函数的原型如下: 的.文档模板的构造函数的原型如下:
由此我们可 以看出, 以看出,命 令消息可以 被多种对象 处理, 处理,这些 对象除了窗 口和视图外 ,还可以是 文档, 文档,文档 模板或应用 程序本身
它可以接收用户的输入 并接受用户的修改 ,并接受用户的修改
通过调用文档和视图的接口将修 改的信息反馈给文档类, 改的信息反馈给文档类,实际的 数据更新仍然是由文档来完成的
CDocument 的虚拟方法 说明 调用来建立 建立文档 由 MFC 调用来 建立 文档 调用来打开 打开文档 由 MFC 调用来 打开 文档 调用来保存 保存文档 由 MFC 调用来 保存 文档 调用来关闭 关闭文档 由 MFC 调用来 关闭 文档 确定观察文档的框架窗口是否被允许关闭 在未撤消文档对象时删除文档数据 释放文件以允许其它应用程序使用 查询文档的修改状态并存储修改的文档 确定文档从它最后一次存储后是否被修订过 设置文档从它最后一次存储后是否被修订过的布尔值 获得视图列表头的位置 获得视图列表的下一个视图
16.1.2 文档 视图结构 文档/视图结构
对数据进行管理和维 护,数据保存在文档 类的成员变量中
文档类通过串行化 文档类通过串行化 的过程将数据保存 到磁盘文件或数据库中 文档类还可处理来自如 文档类还可处理来自如 菜单, 菜单,工具栏按钮和加 速键的WM_COMMAND WM_COMMAND消息 速键的WM_COMMAND消息
多文档程序,最初的文档模板只支持主窗口, 多文档程序,最初的文档模板只支持主窗口,但每次打开一 的函数OnNewDocument,建 个新文档时都调用CDocument的函数 个新文档时都调用 的函数 , 立一个由CMDIChildWnd派生的新的 派生的新的MDI子窗口,这些窗口 子窗口, 立一个由 派生的新的 子窗口 中保存着各种已打开的文档,所有的细节都由MFC库处理. 库处理. 中保存着各种已打开的文档,所有的细节都由 库处理
视图把数据显示 于计算机屏幕上
视图通过相关联的文档 类的成员函数将经过修 改的数据传递给文档对 象 文档对象获得修改过的数据之后, 文档对象获得修改过的数据之后,对 其进行必要的修改, 其进行必要的修改,最后保存到永久 介质(如磁盘文件) 介质(如磁盘文件)中
用户通过与视图的 交互来查看数据并 对数据进行修改
16.5 CView类的派生类介绍 类的派生类介绍
1. CEditView 2.CRichEditView 3.CTreeView
支持类似编辑控件所要实现的功能,常见的文本操作, 支持类似编辑控件所要实现的功能,常见的文本操作,基 本上都是由该类支持实现的.值得注意的是, 本上都是由该类支持实现的.值得注意的是,该类的直接 基类不是CView类,而是类 基类不是 类 而是类CCtrlView. . 主要提供Rich文本操作的支持(Rich文本是既可以 文本操作的支持( 主要提供 文本操作的支持 文本是既可以 为文本,也可以为图形的一种特殊格式文本.) 为文本,也可以为图形的一种特殊格式文本.) 主要提供一些树型控件所实现的功能的支持. 主要提供一些树型控件所实现的功能的支持.它使 一种数据的显示方式可以更富于变化. 一种数据的显示方式可以更富于变化. 该类与类CTreeView一样, 该类与类CTreeView一样,更多的好处在于提供 CTreeView一样 了一种简捷地实现数据的不同显示的途径. 了一种简捷地实现数据的不同显示的途径. 它主要提供视图的滚动显示.需要注意的是, 它主要提供视图的滚动显示.需要注意的是, 该类的直接基类是CView CView类 该类的直接基类是CView类.
视图是文档的不同表现形式 比如,一个*.html文件,在 文件, 比如,一个 文件 浏览器里和在记事本中打开 的表现形式是不同的, 的表现形式是不同的,但它 们操作的是同一个文件, 们操作的是同一个文件,这 就是一个文档对应两视图
由于每一个文档可以有多个视图, 由于每一个文档可以有多个视图,但 每个视图只能对应于一个确定的文档 多文档程序需要解决的问题仅仅是多 个文档的数据管理方法的问题
16.4 视图类
C V iew 的 一 般 方 法 方法 说明 获得指向与视图相 GetDocument( GetDocument ( ) 关联的文档的指针 DoPreparePrinting( DoPreparePrinting ( ) 设置文档标题
方法 IsSelected() OnScroll() OnInitialUpdate() OnDraw() OnUpdate() OnPrepareDC() CView 的主要虚拟方法 说明 确定文档是否被选中 当用户滚动时, 当用户滚动时,CView 的响应 在类第一次构造后由 MFC 调用 由 MFC 调用发出文档到设备描述表 由 MFC 调用对文档的修改进行响应 OnDraw()前允许修改设备描述表由 在调用 OnDraw()前允许修改设备描述表由 MFC 调用
4. ListView 5.CScrollView
16.6 文档模板类 1. CDocTemplate类 类
CDocTemplate类 CDocTemplate类 的基类为 CCmdTarget. CCmdTarget.
2. CDocTemplate类的基本函数说明 类的基本函数说明
CDocTemplate 的一般方法 和虚拟方法 方法 说明 GetDocString DocString() Get DocString () 获得与文档相关的字符串 LoadTemplate() Load Template() 加载指定的模板 AddDocument() Add () 给文档模板添加指定的模 板 RemoveDocument() Remove () 从文档模板列表中删除文 档 GetFirstD GetFirst D ocPosition() 获得与文档模板相关的第 一个文档的位置 GetNextDoc() 获得文档及下一个文档 CreateNewDocument() CreateNewDocument() 建立文档 CreateNewFrame() CreateNewFrame () 建立包含文档和视图的框 架窗口 OpenDocumentFile umentFile() OpenDoc umentFile () 打开由路径名指定的文档 CloseAll AllDocument() Close All Document() 关闭所有文档 SetDefaultTitle() 显示文档窗口的标题栏中 默认的标题 SaveAll AllModified() Save All Modified() 查询文档模板的修改状态 并存储与之关联的所有文档
视图结构中 在文档/视图结构中 文档 视图
在文档和用户之 间起中介作用 除WM_COMMAND外,文档不 WM_COMMAND外 文档不 处理其它的Windows Windows消息 能处理其它的Windows消息 视图可以直接或间接 地访问文档类中的成 员变量, 员变量,它从文档类 中(而不是从存储介质 而不是从存储介质 中)将文档中的数据取 将文档中的数据取 出来, 出来,然后在屏幕上 显示文档的数据
16.2 文档类
CDocument 的一般方法 方法 GetTitle() SetTitle() GetPathName() SetPathName() GetDocTemplate() AddView() RemoveView() UpdateAllViews() DisconnectViews() GetFile() 说明 获得文档标题 设置文档标题 获得文档数据文件的路径字符串 设置文档数据文件的路径字符串 获得指向描述文档类型的文档模板的指针 对与文档相关联的视图列表添加指定的视图 从文档视图列表中删除视图 通知所有视图,文档己被修改,它们应该重画 使文档与视图相分离 获得指向 CFile 类型的指针
VC的MFC库支 VC的MFC库支 持三种不同 的应用程序
使用AppWizard创 创 使用 建SDI和MDI界面的 和 界面的 应用程序的过程几 乎完全一样 主 要 差 别
在创建SDI界面的应用程序时,不生成 界面的应用程序时, 在创建 界面的应用程序时 CChildFrame类,CMainFrame类的基 类 类的基 类为CFrameWnd 类为 在创建MDI界面的应用程序时, 界面的应用程序时, 在创建 界面的应用程序时 CMainFrame类的基类为 类的基类为 CMDIFrameWnd