Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1343007
  • 博文数量: 118
  • 博客积分: 3888
  • 博客等级: 中校
  • 技术积分: 2940
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-10 18:15
个人简介

一看二做三总结

文章分类

全部博文(118)

分类: C/C++

2011-08-08 19:29:41

 

本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接,严禁用于任何商业用途。
作者:fireaxe_hq@hotmail.com
博客:fireaxe.blog.chinaunix.net 

1.      Document的作用

(1)    对数据进行管理和维护。

数据将保存在文档类的成员变量中。试图完成用于数据的交互,并通过调用 CDocument::SetModifiedFlag(Boolean bFlag) 来设定是否在关闭文档时保存数据。

(2)    负责数据源的永久保存,通常是磁盘文件或数据库,即串行化。

2.      流程图

 

3.      可重载函数

 

  1. Serialize()
  2. OnNewDocument()
  3. OnOpenDocument()
  4. DeleteContents()

 

 

4.      CArchive的使用(不适用MFCFramework

  1. CFile myFIlemyFIle.open(pFileName,CFile::modeWrite);
  2. CArchive myAr(&myFile, CArchive::store);

  3. ……

  4. ……

  5. myAr.close();
  6. myFile.close();

 

(1)   CArchive除可以完成CFile的基本功能(如,write()read())外,还支持“<<”、“>>”运算符,以实现串行化。

(2)   要使用“<<”、“>>”,对象必须通过DECLARE_SERIAL()声明为可串行化对象或继承自可串行化对象

 

本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接,严禁用于任何商业用途。
作者:fireaxe_hq@hotmail.com
博客:fireaxe.blog.chinaunix.net 

5.      Serialize函数的实现

MFC可自动生成框架,并自动生成对CFileCArchive的关联。用户只需要实现Serialize()的重载。

  1. void CProgramDoc::Serialize(CArchive& ar)
  2. {
  3. if (ar.IsStoring())
  4. {
  5.     ar << m_strText; // 对可串行化数据
  6.     ar.write(……); // 对不可串行化数据,只能直接使用write函数
  7. }
  8. else
  9. {
  10.     ar >> m_strText; // 对可串行化数据
  11.     ar.read(……); // 对不可串行化数据,只能直接使用write函数
  12. }
  13. pDoc->SetModifiedFlag(TRUE); // 关闭文档时会提示保存
  14. }

 

6.      自定义的类如何实现serialize

需要符合下列五大原则:

(1)    派生自CObject

可保有RTTIDynamic Creation等机制;

可获得某些串行化所需的函数,如IsKindOfIsSerializableSerialize

(2)    DECLARE_SERIAL

(3)    IMPLEMENT_SERIAL

(4)    实现虚函数Serialize()

以正确的把变量写入文件或读出文件,实现方式见上节;

(5)    加上default构造函数

因为动态创建时会用到;

 
本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接,严禁用于任何商业用途。
作者:fireaxe_hq@hotmail.com
博客:fireaxe.blog.chinaunix.net 
阅读(2970) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~