zoukankan      html  css  js  c++  java
  • VC++学习(13):文档串行化

    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;以上是保存,打开略

    2.    文档-视类结构简介

    OnNewDocument在程序启动时被调用,此时可设置文档标题,也可以在String TableIDR_MAINFRAME的第二个"\"后改变文档的标题。须了解的7个字符串的用途,见PPT

       WinAPPInitInstance()中完成DOC,View,MainFrame的归一。

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

    3.    利用CArchive来保存一个类的对象,此类必须支持串行化,需要5个步骤。

     a.让类从CObject派生;

     b.覆盖Serialize()函数,在其中完成保存和读取功能;

     c..h中加入 DECLARE_SERIAL(CGraph)

        d.在。cpp中加入IMPLEMENT_SERIAL(CGraph, CObject, 1 )

     e.定义一个不带参数的构造函数。

    保存绘画数据到文件的简单过程

     a.CGraph中增加一个画图的成员函数,其实不增加也行。可以在View中完成相应功能。

     b.增加四个画图菜单,菜单可以从11课的代码中拷贝。

     c.View中增加LButtonDownUP的响应,在UP中画图,在DOWN中保存点

     d.利用CObArray集合类来保存绘画数据

     e.CGraphicDOC::Serialize()中保存和读取数据

     f.然后在OnDraw中重绘。

    4.           新建和打开文档时,要注意销毁原来的数据。在DOCDeleteContents虚函数中是好时机。代码如下

          

    Example:

    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);

    }

     

  • 相关阅读:
    231. Power of Two
    204. Count Primes
    205. Isomorphic Strings
    203. Remove Linked List Elements
    179. Largest Number
    922. Sort Array By Parity II
    350. Intersection of Two Arrays II
    242. Valid Anagram
    164. Maximum Gap
    147. Insertion Sort List
  • 原文地址:https://www.cnblogs.com/forlina/p/2119767.html
Copyright © 2011-2022 走看看