内容提要
理解对象的持久性* File Demo应用
程序* 创建一个持久类* 直接读写文件* 创建自己的CArchive对象* 理解
注册 关键词
文章正文
对象的持久性
程序需要完成的一项最重要的事情是,当数据以某种方式改变之后,程序能够保存用户的数据。没有保存被编辑过的数据的功能,用户利用应用程序所做的工作只能在应用程序执行时存在,在用户离开应用程序时就会消失。这不是一种好的工作方式!在很多情况下,尤其在使用AppWizard来创建应用
程序时,Visual C++提供许多代码用于保存和加载数据。然而,在一些情况下—特别是当你创建自己对象类型时,必须做一部分额外的工作来保存用户文件的更新。
当读者正在编写一个应用程序时,要处理大量的不同类型对象。你的数据对象有些可以像整数和字符一样简单。其他对象可以是诸如CString类的字符串或你的定制类所创建的对象。当在需要保存和加载文档的应用
程序中使用对象时,需要用某种方式保存和加载这些对象的状态,这样才能重新创建它们,如同上一次任务结束时那样。
一个对象所具有的保存和加载其状态的能力称为“持久性”。几乎所有的MFC类都是持久的,这是因为它们是直接或间接由MFC的CObject类派生的,该类提供了保存和加载对象状态的基本功能。
File Demo应用
程序 你在使用Visual C++的AppWizard来创建程序时,将得到一个可以使用文档和视图类来组织、编辑和显示数据的应用程序。由CDocument类派生的文档对象,负责在会话期间保存应用
程序的数据和在不同时期保存和加载数据,使得文档从一个会话过程到另一个会话过程时得以保持。
创建一个File Demo应用
程序,演示保存和加载由CDocument派生的对象的数据的基本技术。File Demo的文档是包含一个短消息的单一字符串。
有三个菜单项与该应用程序相关。当
程序初次运行时,消息自动设置字符串为Default Message。用户可以选择Edit|Change Message来改变这条消息。File|Save菜单项可以存储文档,File|Open菜单项则从磁盘加载文档。
☆ 文档类的回顾
任何编写过
程序的人都保存和打开过文件,从用户的观点看这就是对象的持久性。我们将可以学到持久性工作的原理。
当使用Visual C++的AppWizard创建
程序时,必须完成以下几步使得文档能够保存和加载其状态。这些步骤是:
1) 定义保存文档数据的成员变量。
2) 在文档类的OnNewDocument( )函数中初始化该成员变量。
3) 在视图类的成员函数OnDraw( )中显示当前文档。
4) 在视图类中提供成员函数以使得用户能够编辑文档。
5) 在文档类的成员函数Serialize( )中增加保存和加载构成该文档的数据所需要的代码。
当应用
程序处理多文档时,你需要做一点额外的工作来保证使用、修改或保存了正确的文档。所幸的是大部分工作都由MFC和AppWizard完成了。
☆ 创建File Demo应用程序
要想创建File Demo应用程序,首先利用AppWizard创建一个SDI应用程序。因为要使AppWizard中的所有选项都保持为其默认值,所以可以在第1步选择了SDI并使Document/View被选中之后就单击Finish按钮,以加快速度。
在ClassView中双击CfileDemoDoc编辑文档类的头文件。在Attributes部分添加一个CString成员变量,变量名为m_message,使得Attributes部分如下所示:
// Attributes
public:
CString m_message;
在此例中,存储的文档只不过是单一字符串对象。通常,存储的文档要更加复杂。然而,用单字符串演示文档持久性的基本方法已经足够。对于MFC程序员来说,在文档中使用公有变量而不用带有公共访问函数的私有变量