• 《VC++深入详解》学习笔记 第十三章 文档与串行化


    (生死不明猫新人)

    CArchive类实现将对象数据保存到永久设备上称之为串行化(二进制流)

    使用说明:必须先新建CFile或其派生类后创建CArchive类对象,二者的打开方式等必须一致,一个文件只能和一个CArchive类关联

      同时支持CObject类及派生对象

    CArchive类构造函数:  CArchive(文件对象指针,加载还是保存,缓存区大小,指定内存?);

    文件写入:  构建文件对象    CFile file(...)

           >构建串行对象     CArchive ar(&file,...)

           >定义数据       int i = 4;char ch='a';

           >分别通过“<<”写入:   ar<<i<<ch;

    文件读取:  构建文件对象    CFile file(...)

           >构建串行对象     CArchive ar(&file,...)

           >定义数据       int i;char ch;

           >分别通过“>>”读取:   ar>>i>>ch;  顺序一致,通过格式区分

              >数据处理显示

    文档字符串:  IDR_MAINFRAME  通过GetDocString(返回值,查找索引)获取字符串

           (顺序排列)主窗口标题/文档默认标题/文档类型名(对话框显示)/过滤器/扩展名(组合使用)/。。/

    文件/新建:  MFC提供文档/视类结构中,每一份文档产生时,会产生文档类对象、框架类对象和视类对象服务文档

            新建按钮对应响应函数封装在MFC架构中,调用XDoc::OnNewDocument()函数,同时程序界面出现前也调用一次该函数

            首先创建文档对象,再创建框架类对象,同时创建视类对象,框架和视类对象创建同时创建其窗口

    MFC架构文档:  文档类负责数据管理(保存、加载),视类负责数据编辑修改。

    文件/保存;打开:  XDoc::Serialize()在保存或加载按钮触发后会执行该函数,根据当前状态选择保存(if)和加载(else)

    文件/打开:  CWinApp::OnFileOpen > CDocManager::OnFileOpen(该函数中调用文件打开对话框) > X::DoPromptFileName跳转

            > CSingDocument::OpenDocument > CDocument::OpenDocument(构造CFile对象;构造CArchive对象,调用Serialize)

            > 衍生XDoc::Serialize()  因为函数间跳转通过指针实现,所以不会有同一个文件二次打开情况

    文件/保存:  同上类似,响应函数在CWinApp中。

            CWinApp:     管理文档管理器 > 文档管理器指针 m_pDocmanange

            CDocmanager:     文档管理器:管理文档模板 > 文档模板列表指针 m_templateList

            CSingDocTemplate:文档模板:管理文档类、框架类、视类

            CDocument:     文档类

    类串行化:  以画图工程为例:画图工程中有一个CGraph类作为画图数据存放(每个图形的画图动作)

          该类要求:1、基类必须为CObject,2、该类中重写Serizlize成员函数,3、定义不带参构造函数

          4、DECLARE_SERIAL(ClassName)头文件中定义,5、IMPLEMENT_SERIAL(ClassName,BaseClassName,Version) 源文件开始定义

          其中4和5实现类的序列化,作为串行化的基本条件

          画图工程中通过画图操作完成的图形绘制需要保存,采用CObject派生的CObArray类来实现保存(CGraph类中创建对象)

          该类类似链表操作,添加元素采用OBject指针实现Add(),保存内容根据画图需要为(起点,终点,图形类型)

          通过文档类存取保存的对象

  • 相关阅读:
    js 屏蔽 键盘 按键
    什么情况下HttpContext.Current.Request.UrlReferrer为空
    vm下linux 按钮 vmware tools
    Table td中 div 不能100%的原因
    行转列
    office 2010 ;密钥
    HTTP 错误 500.21
    [Servlet3.0新特性]Servlet异步处理
    [Servlet3.0新特性]Serlvet文件上传
    [Servlet3.0新特性]注解替代配置文件
  • 原文地址:https://www.cnblogs.com/sepmaple/p/9405044.html
Copyright © 2020-2023  润新知