1.CArchive在菜单打开保存时的代码
CFile file("1.txt",CFile::modeCreate | CFile::modeWrite);
CArchive ar(&file,CArchive::store);
int i=4;
char ch='a';
float f=1.3f;
CString str("http://www.sunxin.org");
ar<<i<<ch<<f<<str;以上是保存,打开略
CArchive类主要是将内存中的对象,保存在永久设备中,程序关闭后再次启动,可以直接从设备中读取。让对象保持持久性的过程称之为串行化。该类没有基类,它重载了提取和插入操作符,可以<<或>>任何数据类型。
注意点:
     1 在用CArchive前,必须构造一个文件或者派生文件类的对象。且一个文件对象,只能用一个活动的CArchive对象管理。
2.文档-视类结构简介
  OnNewDocument是MFC提供的文件新建命令处理一部分,它是由框架类调用的虚函数。
   OnNewDocument在程序启动时被调用,此时可设置文档标题(settitle),也可以在String Table的IDR_MAINFRAME的第二个"\"后改变文档的标题。
   在WinAPP的InitInstance()中完成DOC,View,MainFrame的归一。
    每当新建一个文档,都会产生一个视类对象,框架类对象,文档类对象,三位一体,为文档服务。

当点击系统的打开和新建菜单时,有一系列的步骤,孙鑫老师给我们跟踪了代码的调用过程,此段跟踪我们略过。但我们要牢记住:CWinAPP负责管理文档管理器,文档管理器有一个指针链表,且来保存文档模板的指针,文档模板指针管理三个类DOC,VIEW,MAINFRAME,使其为某文件对象服务。


3.利用CArchive来保存一个类的对象,此类必须支持串行化,该类可串行化需要5个步骤。
  a.让类从CObject派生;
  b.覆盖Serialize()函数,在其中完成保存和读取功能;
  c.在类申明的.h中加入 DECLARE_SERIAL(CGraph);参数为想成为可串行化的类类名
  d.定义一个不带参数的构造函数。
e.在类实现的.cpp中加入IMPLEMENT_SERIAL(CGraph, CObject, 1 );第三个参数为读取数据时,与所保存的数据的版本号。相同,加载成功,不同,加载失败。
保存绘画数据到文件的简单过程
  a.在CGraph中增加一个画图的成员函数,其实不增加也行。可以在View中完成相应功能。
  b.增加四个画图菜单,菜单可以从11课的代码中拷贝。
  c.在View中增加LButtonDown和UP的响应,在UP中画图,在DOWN中保存点
  d.利用CObArray集合类来保存绘画数据
  e.在CGraphicDOC::Serialize()中保存和读取数据
  f.然后在OnDraw中重绘。
n在MFC中,文档类负责管理数据,提供保存和加载数据的功能。视类负责数据的显示,以及给用户提供对数据的编辑和修改功能。
nMFC给我们提供Document/View结构,将一个应用程序所需要的“数据处理与显示”的函数空壳都设计好了,这些函数都是虚函数,我们可以在派生类中重写这些函数。有关文件读写的操作在CDocument的Serialize函数中进行,有关数据和图形显示的操作在CView的OnDraw函数中进行。我们在其派生类中,只需要去关注Serialize和OnDraw函数就可以了,其它的细节我们不需要去理会,程序就可以良好地运行。
n当我们按下“File/Open”,Application Framework会激活文件打开对话框,让你指定文件名,然后自动调用CGraphicDoc::Serialize读取文件。Application Framework还会调用CGraphicView::OnDraw,传递一个显示DC,让你重新绘制窗口内容。
nMFC给我们提供Document/View结构,是希望我们将精力放在数据结构的设计和数据显示的操作上,而不要把时间和精力花费在对象与对象之间、模块与模块之间的通信上。
n一个文档对象可以和多个视类对象相关联,而一个视类对象只能和一个文档对象相关联。

4.新建和打开文档时,要注意销毁原来的数据。在DOC的DeleteContents虚函数中是好时机。代码如下
int nCount;
nCount=m_obArray.GetSize();
/*for(int i=0;i<nCount;i++)
{
  delete m_obArray.GetAt(i);//释放指针指向的内存空间
  //m_obArray.RemoveAt(i);//移除链表中的元素。嘿嘿,别搞错了。但在此处不能这样用,会导致非法操作。要用下面的方法沙
}
m_obArray.RemoveAll();*/
while(nCount--)
{
  delete m_obArray.GetAt(nCount);
  m_obArray.RemoveAt(nCount);
}

孙鑫MFC笔记之八--文档串行化相关推荐

  1. 孙鑫MFC笔记(15)--多线程和聊天室的创建

    孙鑫MFC笔记(15)--多线程和聊天室的创建 代码1分析: 说明:对于单核cpu的电脑来说,线程都在自己的时间片中运行,单位时间内,系统只能运行一个线程,交替运行:对于多核cpu或多cpu的电脑来说 ...

  2. MFC 文件I/O和串行化

    1.枚举所有文件夹(递归) void EnumerateFolders () {WIN32_FIND_DATA fd;HANDLE hFind = ::FindFirstFile (_T (" ...

  3. 孙鑫MFC笔记之十六--Active控件

    基本概念: 容器和服务器程序 容器应用程序时可以嵌入或链接对象的应用程序.Word 就是容器应用程序.服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序.Excel 就是服务器应用程序. ...

  4. 孙鑫-MFC笔记九--菜单编程

    弹出菜单(Pop-up)是不能用来作命令响应的.即下拉等形式. 响应菜单响应命令的顺序是:视类,文档类,框架类,应用程序类. Windows消息分三类: 标准消息,WM_ (除WM_COMMAND)都 ...

  5. 孙鑫-MFC笔记二--MFC框架剖析

    MFC,Microsoft Foundation Class,微软基础类库,是微软为了简化程序员的开发工作所开发的一套C++类集合,是一套面向对象的函数库,以类的方式提供给用户使用. 实际上,MFC同 ...

  6. 孙鑫MFC笔记之十五--进程间通信

    方法: n剪贴板 n匿名管道 n命名管道 n邮槽 1.剪贴板   a.创建个ClipBoard的对话框应用程序,加两EditBox和两个Button发送接收.   b.具体代码:     发送端代码: ...

  7. 孙鑫-MFC笔记一--Windows程序内部运行机制

    对于一个初学者来说,常常会用到各种库函数,例如printf等等,这些库函数是由你所使用的编译器厂商提供的,在Windows操作系统下,开发的应用程序, 也有这样的库函数,不同的是,这样的库函数,是有w ...

  8. 孙鑫-MFC笔记七--文件与注册表

    c 语言对文件的操作是通过 FILE 结构体来完成的 1 定义一个文件结构体的指针,获取文件结构体指针并付给       如何打开一个文件    FILE *fopen(const char*file ...

  9. 孙鑫-MFC笔记四--文本编程

    1,创建插入符: void CreateSolidCaret( int nWidth, int nHeight );//创建插入符 void CreateCaret( CBitmap* pBitmap ...

最新文章

  1. Python代码注释
  2. 3.浏览器输入www.baidu.com到显示主页的全过程
  3. 怎样查看已经记住密码的网站的密码
  4. oAuth2.0 登录新浪微博 发送新浪微博 代码
  5. leetcode 66 Plus One
  6. iOS - Masonry自动布局
  7. C语言char对应的码,char码值对应列表大全
  8. html列自动变高,HTML 应用 多列浮动等高处理
  9. 办公必备的WPS Office 2021 for mac(wps 2021中文版)
  10. VC 2014 QQ连连看外挂辅助(讲解,附带下载) CE QQ连连看基址
  11. 【随笔】Java团长
  12. python 使用QPixmap显示图片扭曲、错位问题的解决
  13. [转]申瓯 JSY2000-06 程控电话交换机呼叫转移设置
  14. 微信自定义菜单与网页授权结合
  15. 服务器显示屏出现白屏,远程服务器时出现白屏怎么解决
  16. RocketMQ的Quorum Write和自动降级
  17. UAF 身份认证框架
  18. 分享微软手机无管理服务器,Win10 Mobile手机再体验:没有微信的生态算什么生态?...
  19. 量化投资入门指南:风险模型和交易成本模型
  20. 爬虫_西电研究生教务系统_技术文档

热门文章

  1. Android usb audio录音(四)
  2. 【Android架构GPS篇】之定位数据如何从GPS芯片到应用层
  3. Educoder Matplotlib和Seaborn 三维图 第一关绘制三维图
  4. markdown字体颜色_Markdown转微信公众号格式
  5. 自己动手Centos7搭建wordpress网站步骤(LNMP+wordpress)
  6. c++堆内存默认大小_Java 自动内存管理
  7. 陀螺仪数据转换成角度_请教怎么把用陀螺仪积分得到的角度转换到大地坐标系下?...
  8. python ssh登录交换机_python使用paramiko模块通过ssh2协议对交换机进行配置的方法...
  9. python 服务监控_promethues + python + flask监控后端服务状态
  10. vc 2008建立c语言,C语言纯外行,要运行别人给的一个代码,用VC2008