第1章单文档与多文档 本章主要介绍Vsua1C++中的 文档/视图结构的工作机制
1 第 11章 单文档与多文档 本章主要介绍Visual C++中的 文档/视图结构的工作机制
111概述
2 11.1 概述
111单文档界面与多文档界面 SDI的应用程序 只有一个窗口 VC的MFC库支 单文档界面(SDD 持三种不同↓多文档界面MD MDI的应用程序每次 的应用程序 可以读写多个文件或 基于对话框的应用程序 文档,可同时对多个 使用 Appwizard创建 文档进行操作,可以 SD和MD界面的应 有多个子窗口 用程序的过程几乎完 全一样 在创建SDI界面的应用程序时,不生成 CHild Frame类, MAin Frame类的基类 主要差别 为 CframeWnd 在创建MD界面的应用程序时, CMain frame类的基类为 CMDIFrame Wnd
3 11.1.1单文档界面与多文档界面 VC的MFC库支 持三种不同 的应用程序 单文档界面(SDI) 多文档界面(MDI) 基于对话框的应用程序 SDI的应用程序 只有一个窗口 MDI的应用程序每次 可以读写多个文件或 文档,可同时对多个 文档进行操作,可以 有多个子窗口 主 要 差 别 在创建SDI界面的应用程序时,不生成 CChildFrame类,CMainFrame类的基类 为CFrameWnd 在创建MDI界面的应用程序时, CMainFrame类的基类为 CMDIFrameWnd 使用AppWizard创建 SDI和MDI界面的应 用程序的过程几乎完 全一样
视图是文档的不同表现形式,一个html 语言的文件,在浏览器里和在记事本中打 开的表现形式是不同的但它们操作的是同 个文件这就是一个文档对应两视图 由于每一个文档可以有多个视图,但 每个视图只能对应于一个确定的文档 多文档程序需要解决的问题仅仅是多 个文档的数据管理方法的问题 多文档程序,最初的文档模板只支持主窗口,但每次打开 个新文档时都调用 CDocument的函数 OnNewDocument,建 立一个由 CMDIChildWnd派生的新的MD子窗口,这些窗口 中保存着各种已打开的文档,所有的细节都由MFC库处理4
4 由于每一个文档可以有多个视图,但 每个视图只能对应于一个确定的文档 多文档程序需要解决的问题仅仅是多 个文档的数据管理方法的问题 多文档程序,最初的文档模板只支持主窗口,但每次打开一 个新文档时都调用CDocument的函数OnNewDocument,建 立一个由CMDIChildWnd派生的新的MDI子窗口,这些窗口 中保存着各种已打开的文档,所有的细节都由MFC库处理 视图是文档的不同表现形式,一个*.html 语言的文件,在浏览器里和在记事本中打 开的表现形式是不同的但它们操作的是同 一个文件这就是一个文档对应两视图
112文档视图结这北良我们 的过程将数据保存 到磁盘文件或数据库中 令消息可以 被多种对象 对数据进行管理和维 处理,这些 护,数据保存在文档 文档类还可处理来自如 类的成员变量中 菜单、工具栏按钮和加对象除了窗 速键的啊 M COMMAND消息口和视图外 还可以是 在文栏/视图结构中 文档、文档 除 WM COMMAN外,文档不模板或应用 在文档和用户之(能处理其它的 Windows消息』程序本身 间起中介作用 视图可以直接或间接 的访问文档类中的成 它可以接收用户的输入 员变量,它从文档类 ,并接受用户的修改 中而不是从存储介质这一点与 Windows,消息 中)将文档中的数据取和控件通知消息不同, 通过调用文档和视图的接口将修出来,然后在屏幕上因为 Windows,消息和控 改的信息反馈给文档类,实际的显示文档的数据 件通知消息就只能被 数据更新仍然是由文档来完成的 窗口和视图处理
5 11.1.2 文档/视图结构 在文档/视图结构中 对数据进行管理和维 护,数据保存在文档 类的成员变量中 文档类通过串行化 的过程将数据保存 到磁盘文件或数据库中 文档类还可处理来自如 菜单、工具栏按钮和加 速键的WM_COMMAND消息 除WM_COMMAND外,文档不 能处理其它的Windows消息 由此我们可 以看出,命 令消息可以 被多种对象 处理,这些 对象除了窗 口和视图外 ,还可以是 文档、文档 模板或应用 程序本身 这一点与Windows消息 和控件通知消息不同, 因为Windows消息和控 件通知消息就只能被 窗口和视图处理。 通过调用文档和视图的接口将修 改的信息反馈给文档类,实际的 数据更新仍然是由文档来完成的 在文档和用户之 间起中介作用 视图可以直接或间接 的访问文档类中的成 员变量,它从文档类 中(而不是从存储介质 中)将文档中的数据取 出来,然后在屏幕上 显示文档的数据 它可以接收用户的输入 ,并接受用户的修改