• 深入浅出mfc学习笔记——六大关键技术仿真_Persistence(永久保存)


    1:在D/v结构中, 数据都放在一份document中。我们只要把其中的成员变量依次写进文件即可。成员变量很可能是一个对象。而面向对象,我们首先应该记载其类名称,然后才是对象中的数据。读档就有点麻烦了。档程序从文件中读到一个类名称时,它如何实现一个对象,这需要动态创建技术。

    mfc有一套Serialize机制。目的在于把文件名的选择。文件的开关。缓存区的建立。数据的读写,提取运算符,插入运算符的重载,对象的动态创建等都包装起来。

    2:CObListmfc提供的类。是一个链表,可放置任何从CObject派生下来的对象。

    我们可以在每次记录对象内容的时候。先写入一个代码。表示此对象的类是否曾在文件中记录过了。如果是新类,乖乖的记录其类名称。如果是旧类则以代码表示。这样可以节省文件爱你大小以及程序用于解析的时间,还有一个问题。文件的版本如何控制。旧版程序读取新版文件。新版程序读取旧版文件。都可能出问题,最好把版本号码记录上去。最好是每个类都有自己的版本号码。

    if(ar.isStoring())

    {

    ar<<m_sizeDoc;

    else

    ar>>m_sizeDoc;

    m_graphList.serialize(ar);

    }

    每一个可写到文件或可从文件中读出的类。都应该有它自己的serailize函数。负责它自己的数据读写文件操作。此类应该改写<<运算符和>>运算符。把数据导流到archive中,archive是一个和文件息息相关的缓冲区。

    要将<<和>>两个运算符重载。还要让serialize放入类声明中。可以使用Declare_serial/Implement_serial宏。

    #Define declare serial(class_name)

    Declare_dyncreate(class_name)\

    Friend CArchive&Afxapi operator>>(CArchive& ar,class_name* &pob);

    为了在每一个对象被处理(读或写)之前,能够处理琐碎的工作。CRuntimeClass需要两个函数Load和store

    3:message mapping(消息映射)

    Begin_message_map(theclass,baseclass)

    on_command(id,memberFxn)

    End_message_map

    mfc对于消息循环的规定是

    <1>:如果是一般的windows消息(WM_XXX),则一定是由派生类流向基类,没有旁流的可能。

    <2>:如果是命令消息Wm_Command,那就有奇特的路线了。

    命令消息接收者的类型                                                  处理次序

    Frame窗口                                                                1: View

                                                                                  2:Frame窗口本身

                                                                                  3:CWinAPP对象

    view                                                                        1:view 本身

                                                                                  2:document

    Document                                                                1:Document本身

                                                                                  2:Document template

  • 相关阅读:
    [问题2015S13] 复旦高等代数 II(14级)每周一题(第十四教学周)
    [问题2015S12] 复旦高等代数 II(14级)每周一题(第十三教学周)
    [问题2015S11] 复旦高等代数 II(14级)每周一题(第十二教学周)
    [问题2015S10] 复旦高等代数 II(14级)每周一题(第十一教学周)
    [问题2015S09] 复旦高等代数 II(14级)每周一题(第十教学周)
    [问题2015S08] 复旦高等代数 II(14级)每周一题(第九教学周)
    @JsonFormat与@DateTimeFormat注解的使用
    intellij idea 重命名或复制一个项目(不用重启)
    PageHelper中默认PageInfo成员变量
    图片的base64编码
  • 原文地址:https://www.cnblogs.com/lzjsky/p/1760427.html
Copyright © 2020-2023  润新知