象,并且将CArchive 对象与CFile 对象分离。
其原型为:
void Close( );
8.1.4 加入串行化代码
介绍完串行化的基本内容,本节将讲述如何在文档视图应用程序中添加文档类的串行化
功能的方法来实现文档的保存和读取。
在MFC 中,文档数据进行串行化的处理过程,同样是通过文档类的Serialize()函数进行。
下面以选择“文件|另存为”菜单命令为例介绍这个过程。首先MFC 框架提示用户选取文件
名,并打开对应的CFile 对象。接着框架创建指向该CFile 对象的CArchive 对象。由于是“另
存为”,因此该对象设置为“存储”,即CArchive::store。然后调用CDoccomnt 派生类即程序
的文档类中定义的Serialize()函数,将CArchive 对象的引用传递给该函数。程序的文档类的
Serialize()函数执行完毕后,框架先销毁CArchive 对象,再销毁CFile 对象。
因此,根据上述过程,在文档视图应用程序中进行文档的串行化处理,只需要在文档类
中重载CDoccomnt::Serialize()函数,对特定的文档数据进行串行化即可实现。下面给出一个
在文档类中加入串行化代码的示例代码。该段代码中CSampleDoc 类是程序的文档类,它有
一个CSampleData 类的成员变量指针,用于保存文档数据。示例演示了CSampleDoc 类如何
将CSampleData 类的文档数据串行化。
1.CSampleData 类的声明
具体代码如下:
class CSampleData : public CObject
{
public:
枫叶文学网www.fywxw.com
第8 章 文件cāo作
·183·
//定义的公共数据类型
CString m_strNcom;
int m_nType;
CSampleData();
virtual ~CSampleData();
//定义串行化的宏
DECLARE_SERIAL(CSampleData)
//串行化虚函数
virtual void Serialize(CArchive &ar);
};
2.CSampleData 类的实现
具体代码如下:
//实现串行化的宏
IMPLEMENT_SERIAL(CSampleData, CObject, 0)
//初始化
CSampleData::CSampleData()
{
m_nType=0;
m_strNcom="";
}
CSampleData::~CSampleData()
{
}
//串行化函数
void CSampleData::Serialize(CArchive &ar)
{
//基