所谓序列化就是向一个数据文件中一个接一个的写入图形对象。
从CObject派生的类可以序列化,但还需要以下几个条件:
1.定义该类时,在类的说明文件中使用DECLARE_SERIAL(CLASSNAME)宏;
2.定义一个不带参数的构造函数(默认构造函数)。
3.在类的实现文件中使用IMPLEMENT_SERIAL(CLASSNAME, BASECLASS)宏;
4.重载Serialize成员函数;
反序列化就是从文档中读出已经序列化的对象,并采用读出的数据实现对图形对象的构造。为了完成序列化,MFC保存了已经序列化的图形对象信息。当MFC序列化一个图形对象时,它采用这些信息来动态创建图形对象,并自动把它们装载到图形列表中。
序列化机制:
动态创建图形对象,需要动态创建的支持,而动态创建又需要运行时类信息的支持。运行时类信息的支持,动态创建的支持和序列化支持这3各功能的层次依次升高。
仅仅有类的支持是不够的,MFC还提供了一个归档类CArchive来支持简单类型的数据和复杂对象的读写。CArchive在文件和内存对象之间充当一个代理者的角色。它负责按一定的顺序和格式把内存对象写到文件中,或者对出来,可以被看成是一个二进制的流。
在创建CArchive对象时,必须有一个CFile对象,它代表了存储媒介。通常,程序员不必要做这个工作,打开或保存文当时MFC将自己创建CFile对象和CArchive对象,并在适当的时候调用序列化类的Serialize函数。
CArchive对象被创建时,需要指定它是用来读还是用来写,即指定序列化操作的方向,Serialize函数用CArchive的函数IsStoring来判定CArchive是用于读出数据还是写入数据。