当前位置: 首页 > 文档资料 > VC 经典教程 >

7.1文档/视图概念

优质
小牛编辑
130浏览
2023-12-01

7.1.1概念

  在文档视结构里,文档是一个应用程序数据基本元素的集合,它构成应用程序所使用的数据单元;另外它还提供了管理和维护数据的手段。

文档是一种数据源,数据源有很多种,最常见的是磁盘文件,但它不必是一个磁盘文件,文档的数据源也可以来自串行口、网络或摄像机输入信号等。在第十二章“多线程和串行通信编程”中,我们展示了如何使用串行口作为数据输入的文档/视结构程序。文档对象负责来自所有数据源的数据的管理。

视图是数据的用户窗口,为用户提供了文档的可视的数据显示,它把文档的部分或全部内容在窗口中显示出来。视图还给用户提供了一个与文档中的数据交互的界面,它把用户的输入转化为对文档中数据的操作。每个文档都会有一个或多个视图显示,一个文档可以有多个不同的视图。比如,在Excel电子表格中,我们可以将数据以表格方式显示,也可以将数据以图表方式显示。一个视图既可以输出到窗口中,也可以输出到打印机上。

图7-1说明了文档及其视图之间的关系。

T7_1.tif (144248 bytes)

图 7-1 文档和视图

MFC的文档/视结构机制把数据同它的显示以及用户对数据的操作分离开来。所有对数据的修改由文档对象来完成。视图调用这个对象的方法来访问和更新数据。

7.1.2两类文档视结构程序

有两种类型的文档视结构程序:单文档界面(SDI)应用程序和多文档界面(MDI)应用程序。

在单文档界面程序中,用户在同一时刻只能操作一个文档。象Windows95下的NotePad记事本程序(如图7-2所示)就是这样的例子。在这些应用程序中,打开文档时会自动关闭当前打开的活动文档,若文档修改后尚未保存,会提示是否保存所做的修改。因为一次只开一个窗口,因此不象WORD那样需要一个窗口菜单。单文档应用程序一般都提供一个File菜单,在该菜单下有一组命令,用于新建文档(New)、打开已有文档(Open)、保存或换名存盘文档等。这类程序相对比较简单,常见的应用程序有终端仿真程序和一些工具程序。

T7_2.tif (234336 bytes)

图7-2 单文档程序(记事本)

一个多文档界面应用程序也能操作文档,但它允许同时操作多个文档。如图7-2,Microsoft Word就是这样的例子。你可以打开多个文件(同时也就为每个文件打开一个窗口),可以通过切换活动窗口激活相应的文档进行编辑。多文档应用程序也提供一个File菜单,用于新建、打开、保存文档。与单文档应用程序不同的是,它往往还提供提供一个Close(关闭)菜单项,用于关闭当前打开的文档。多文档应用程序还提供一个窗口菜单,管理所有打开的子窗口,包括对子窗口的新建、关闭、层叠、平铺等。关闭一个窗口时,窗口内的文档也被自动关闭。在这一章里,我们只讨论单文档界面应用程序的编制,有关多文档技术在下一章里再做讨论。

T7_3.tif (258750 bytes)

图7-3 多文档程序(Microsoft Word)

7.1.3使用文档/视结构的意义

文档视结构的提出对于广大程序员来说是一个福音,它大大简化了多数应用程序的设计开发过程。文档视结构带来的好处主要有:

a. 首先是将数据操作和数据显示、用户界面分离开。这是一种“分而治之”的思想,这种思想使得模块划分更加合理、模块独立性更强,同时也简化了数据操作和数据显示、用户界面工作。文档只负责数据管理,不涉及用户界面;视图只负责数据输出与用户界面的交互,可以不考虑应用程序的数据是如何组织的,甚至当文档中的数据结构发生变化时也不必改动视图的代码。

b.MFC在文档/视结构上提供了许多标准操作界面,包括新建文件、打开文件、保存文件、打印等,减轻了用户的工作量。用户不必再书写这些重复的代码,从而可以把更多的精力放到完成应用程序特定功能的代码上:主要是从数据源中读取数据和显示。

c. 支持打印预览和电子邮件发送功能。用户无需编写代码或只需要编写很少的代码,就可以为应用程序提供打印预览功能。同样的功能如果需要自己写的话,需要数千行的代码。另外,MFC支持在文档视结构中以电子邮件形式直接发送当前文档的功能,当然本地要有支持MAPI(微软电子邮件接口)的应用程序,如Microsoft Exchange。可以这样理解:MFC已经把微软开发人员的智慧和技术溶入到了你自己的应用程序中。

由于文档视结构功能如此强大,因此一般我们都首先使用AppWizard生成基于文档/视结构的单文档或多文档框架程序,然后在其中添加自己的特殊代码,完成应用程序的特定功能。但是,并非所有基于窗口的应用程序都要使用文档/视结构。象Visual C++随带的例子Hello、MDI都没有使用文档/视结构。有两种情况不宜采用文档、视结构:

(1)不是面向数据的应用或数据量很少的应用程序,不宜采用文档/视结构。如一些工具程序包括磁盘扫描程序、时钟程序,还有一些过程控制程序等。

(2)不使用标准的窗口用户界面的程序,象一些游戏等。