第8章 - 第一课windows程序内部运行原理及sdk编程实现

第8章 - 第一课windows程序内部运行原理及sdk编程实现

ID:12848023

大小:359.00 KB

页数:29页

时间:2018-07-19

第8章 - 第一课windows程序内部运行原理及sdk编程实现_第1页
第8章 - 第一课windows程序内部运行原理及sdk编程实现_第2页
第8章 - 第一课windows程序内部运行原理及sdk编程实现_第3页
第8章 - 第一课windows程序内部运行原理及sdk编程实现_第4页
第8章 - 第一课windows程序内部运行原理及sdk编程实现_第5页
资源描述:

《第8章 - 第一课windows程序内部运行原理及sdk编程实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章文档序列化大多数应用程序都为用户提供了数据的保存功能,这些数据可能是电子表格、字处理文档、一组数据或图形等等。从磁盘存储器上存取这些数据的工作往往是通过文件操作或者数据库操作来完成的。关于数据库操作的内容,我们将在后面的章节中进行详细的介绍,在本章的内容中,我们主要讨论如何通过文件操作实现一般意义上的数据存取工作。通过文件操作来实现数据的存取工作通常有两种工作方式:一种是使对象具有序列化;另一种方法就是直接使用CFile对象处理文件。本章就将对这两部分内容分别做出详解。8.1序列化在MFC当中,对象的序列化功能主要是通过文

2、档/视图结构中特有的文档对象的序列化机制来实现的。本节,我们将详细介绍如何使用序列化机制来实现对象的序列化。序列化,简单地说就是向一个持久性的存储媒体——如磁盘文件保存对象或读取对象的过程。序列化分为两部分,当把应用程序数据以文件形式存储在系统磁盘中时,叫做序列化;当从磁盘文件中恢复应用程序数据的状态时,叫做反序列化,这两个部分的组合构成了VisualC++中的应用程序对象的序列化。8.1.1CArchive类和Serialize函数VisualC++应用程序中的序列化是通过CArchive类来实现的。CArchive类总是与一

3、个CFile对象相关联,CArchive类是作为CFile对象的输入输出流而设计的,如图8-00所示,它使用经过重载的C++流入(<<)和流出(>>)操作符从存储应用程序数据的文件中实现读取和写入数据,而将这些数据保存到磁盘文件中的工作由CArchive对象指示CFile对象来完成。应用程序框架应用程序对象序列化函数CFileCArchive类图8-00CArchive类和CFile类可以实现序列化的类——即从CObject继承而来的类,有一个叫做Serialize的成员函数,序列化工作主要是在这个函数当中进行的。当应用程序读取

4、或写入文件时,文档对象的Serialize函数被调用,并传递用于从文件读取或向文件写入数据的CArchive对象。在Serialize函数中,要遵循的典型逻辑是通过调用CArchive类的IsStoring或IsLoading函数来判定当前行为是正在对文件写入还是读取。根据这两个函数中任何一个的返回值即可判定应用程序需要从CArchive类的I/O流中读取还是向其写入。当用户在打开或保存拥有文档对象数据的文件或者使用文档对象的Open、Save、SaveAs菜单命令时,MFC便会自动调用Serialize函数,一个典型的Seri

5、alize函数如下所示:voidCAge::Serialize(CArchive&ar){CObject::Serialize(ar);   if(ar.IsStoring())   ar<>m_years;}其中,ar是一个指明应用程序序列化对象的CArchive引用参数。CArchive::Serialize成员函数可以告诉用户序列化对象当前是否用来存储或加载。可以将Serialize函数放置在所创建的任何类中,以便文档的Serialize函数中调用这些类的Serialize函数。

6、8.1.2使自己的类支持序列化在前几章讲过的例子中使用CString类的字符串来保存文本行,由于它是MFC类,因此可以串行化自己,将自己写入磁盘或从磁盘文件中读取二进制数据来建立对象。那么,如果不是标准的MFC类,比如用户自己定义的类,如何让它支持序列化呢?要让用户定义的类支持序列化,一般分为五步:1.从CObject或其派生类派生出用户的类2.在类声明文件中,加入DECLARE_SERIAL宏。编译时,编译器将扩充该宏,这是串行化对象所必需的。3.重载Serialize()成员函数,加入必要的代码,用以保存对象的数据成员到CA

7、rchive对象以及从CArchive对象载入对象的数据成员状态。4.定义一个不带参数的构造函数。5.在实现文件中加入IMPLEMENT_SERIAL宏。下面将通过一个实例来演示如何让用户定义的类支持序列化功能。8.1.3实例:保存和显示图形还记得第6章的绘图程序吗,用户画好的图形不仅不能保存下来,而且当窗口发生重绘时,图形也就不见了,本实例就将解决这两个问题,不仅使所画的图形在窗口重绘时依然保留,而且还给它添加了保存及再显示功能。我们在第6章绘图程序上加的内容够多了,这里为了更清晰的讲述本章的重点——序列化,将新建一个工程,当

8、然,这个工程所要实现的功能还是和第6章绘图程序一样,只不过给它加个序列化,完整例程请参见光盘中的例子代码EX08_00,具体操作步骤如下:l步骤1:新建一个MFC单文档应用程序,工程名为EX08_00或用户自定义。l步骤2:为新建的工程先实现第6章的简单绘图功能

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。