孙鑫VC++第13章文档和串行化

 

                                       第13章  文档与串行化

 

1.      使用CArchive类对文件进行读写操作

 

CArchive类对象将对象数据保存到永久设备上,例如磁盘文件,让对象数据持久性的过程就称之为串行化(活序列化);

 

 

在创建CArchive对象之前必须先创建一个CFile类或者其派生类对象,并且因此存档对象既可以用来加载数据,也可以用来保存数据,所以确保这个CFile类对象的打开方式与该文档对象的加载/保存状态相一致。

 

2.      写操作

 

 

//先构造CFile文件对象

CFilefile("1.txt",CFile::modeCreate | CFile::modeWrite);

//构造存档对象

CArchivear(&file,CArchive::store);

inti=4;

charch='a';

//在C++中,浮点数默认情况下是定义为double类型,所以后面加个f

floatf=1.3f;

CStringstr("http://www.sunxin.org");

//保存数据

         ar<<i<<ch<<f<<str;

 

 

3串行化读取操作

 

         //构造CFile文件对象

         CFilefile("1.txt",CFile::modeRead);

         //构造存档对象

         CArchive ar(&file,CArchive::load);

         int i;

         char ch;

         float f;

         CString str;

         CString strResult;

         //读取数据,注意顺序要跟保存的一致

         ar>>i>>ch>>f>>str;

 

         strResult.Format("%d,%c,%f,%s",i,ch,f,str);

         MessageBox(strResult);

3.      MFC框架提供的文件新建功能

 

C**Doc类中的OnNewDocument函数就是【文件/新建】命令处理的一部分,由框架调用;

 

可在这里设置文档标题:SetTitle(“http://www.sunxin.org”);

 

4.      也可以在IDR_MAINFRAME字符串资源里面修改文档标题

 

第一个\n和第二个\n之间的值就是

 

 

5.      IDR_MAINFRAME资源是在C**App类中的InitInstance函数中调用的;它共有7个字串;

 

6.      在函数前面有afx_msg标识符,说明这是个菜单命令响应函数;

 

7.      当程序运行时候,MFC框架内部接收的无论是文档类指针、框架类指针、或者是视类指针,它们都是指向派生类的指针;

 

8.      文档串行化:文档类的Serialize函数

 

Serialize函数就是文档类提供的用来保存和加载数据的函数,我们可以利用其参数提供的CArchive对象来保存或者加载我们自己的数据;

 

注意:当保存后直接打开是打开不了的,除非你更好了另外一个文档类对象再重新打开

 

 

这是MFC的机制:文档类负责管理数据,提供对数据的保存和加载,视类负责显示数据,为用户提供编辑数据和修改数据的功能;

 

9.      对于多文档程序来说,每打开一个文件都会构造一个新的文档对象,但是注意单文档不同,对于单文档来说,文档对象本身不会被销毁,它只是将数据清空,然后再与一个新的文件关联;

 

 

10.  实现一个类可串行化,有5个步骤(看书)

 

一个可串行化的类通常都有一个Serialize成员函数

 

11.  对于一个文档类对象来说,可以有多个视类对象与相关;

但对一个视类对象来说,它只能与一个文档类对象相关;

 

 

12.  当先前保存数据的版本号跟现在读取时数据的版本号不一致的时候,就会弹出警告框:非预期的文件格式;

 

13.  MFC的Document/View结构:

 

有关文件读写的操作,在CDocument的Serialize函数中进行;

有关数据和图形显示的操作在CView的OnDraw函数中进行;

 

 

14.  DeleteContents函数是一个虚函数,主要是由框架调用,用来删除文档的数据,同时并不销毁CDocument对象本身,它是在文档将要被销毁之前被调用,它也会在该文档对象再重复使用之前被调用,以确保文档是空的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值