深入浅出MFC学习笔记:MFC六大关键技术仿真之永续生存

永续生存

MFC中很重要的一个模块:负责实现资料的读写过程,即数据该怎么去保存到硬盘中和从硬盘中取出来。

参考文献:深入浅出MFC-侯捷

对象导向有一个术语:Persistence,有了此机制之后,对象就能永续保存。

MFC有一套Serialize机制,目的在于把档名的选择,文件的开关,缓冲区的建立,资料的读写,萃取运算子(>>)和嵌入运算子(<<)的多载,对象的动态生成包装起来。这些操作除了资料的读写和对象的动态生成(之前已经实现过),其余都是枝节。

文档的写过程,只要把其中的成员变量依次写进文件即可。我们首先应该记载其类别名称,然后才是对象中的资料。

读档有点麻烦,当程序从文件中读到一个类别名称,需要动态生成技术来生成一个对象。

1..DECLARE_SERIAL和IMPLEMENT_SERIAL宏

由此可以知道SERIAL宏是建立在动态生成的机制基础上的。

2.Serialble的必要条件


3.例子


要构建上图所示的资料结构,将这些资料进行存档。

首先介绍例子所用到的类的类别


3.1.Serialize过程:






3.2.大致的写档过程


3.3.详解Serialize写档奥秘:

3.3.1例子中文档所保存的具体资料如下:(我们关注的是程序怎么构造出这些数据)




3.3.2具体的写档过程如下:


//令file和archive产生关联,对着archive做序列化动作。CSribbleDoc要求线条串行COblist存储它自己。


//operator<<操作的作用:分为两部分,WriteClass(pClassRef)负责输出上文所要求的数据中的前面一部分,即区分是否为新类别的标记,类别的版本号码,类的名称大小及类的名称,至于后面的剩余数据由((Cobject*)pOb)->Serialize(*this)负责输出,将这些数据存储到序列化文件.SCB文件中。等到读档的过程需要用到SCB文件。





写档总结:程序组织数据,通过arr<<arr.Write等操作将数据写到序列化文件.SCB文件中。

3.4.详解Serialize读档奥秘:





这边有DocTemplate负责产生Document,View,DocumentFrame三个对象(均为动态创建)


//令file和archive产生关联,对着archive做序列化动作



上图中的pOb为动态创建,获得当前所需类型的对象。



//返回所需Se
rialize的对象的CRuntimeClass,由此便可以动态创建所需要的Serialize对象


//由.SCB文件中读入类的名称,从而可以查找类别型录网来获得所需类的CruntimeClass数据结构。



读档总结:从.SCB文件中读取数据,读出类名,就可以通过一一比对类树开始进行动态生成,对该类进行Serialize操作。

总结:写档的过程是把各变量或者对象的数据全部写到序列化SCB文件中,将其保存到硬盘中;读档的时候就可以打开这个SCB文件,将数据读到各变量或者对象中。


Tip:程序员的工作:改写用户自定义对象中的Serialize函数即可。


没弄明白的问题:为啥IMPLEMENT_SERIAL需要重载>>操作,而不重载<<操作。书本中的解释是WriteObject操作不需要CRuntimeClass信息,但是ReadObject操作需要,因为在读完文件后还要做动态生成的动作。

疑惑:书中的代码详解有关于动态生成的具体过程应该是从SCB文件读取出所需要的类名,然后通过一一比对,获取所需要的CRuntimeClass信息,这样子来理解的话,ReadObject操作为啥还需要CRuntimeClass信息?

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘 要 40多年来,计算机在处理各方面的应用发展迅速。尤其在计算机飞速发展的今天,计算机的应用已在社会的各个领域深入开来,无论是在商业,工业还是政府部门都早已普及。 本文对实现图书销售系统的关键技术MFC和ADO进行了概括的描述,探讨了MFC的宏观框架体系、构成应用程序的对象、ADO以及在VC中使用ADO的步骤。本次设计采用了MFC技术、ADO技术,并且结合Access2000来开发书店的图书销售系统。 关键词: 图书销售,MFC,ADO 目 录 1 前 言 1 2 关键技术分析 2 2.1 MFC概述 2 2.1.1 MFC的宏观框架体系 2 2.1.2 构成应用程序的对象 3 2.2 VC开发数据库之ADO 4 2.2.1 ADO概述 4 2.2.2 在VC中使用ADO 4 3 总 结 8 参考文献 9 1 前 言 在科技飞速发展的今天,计算机的应用已经深入到各行各业当中。为了提高书店日常工作效率,因此设计了图书销售系统,协助书店的图书销售的管理。该前台销售部分的开发是为了简化销售过程,能够方便快捷的销售图书,系统配合了后台管理系统和数据库使用,完成零售业的供销存等商业活动过程。本次设计的实现采用Visual C++6.0和Access 2000等工具来完成,其环境为单击环境,采用MFC连接数据库,设计出了简洁、易用的人性化界面。实现的功能有:登陆过程、增加记录、删除记录、查询功能、计费功能等。特点:操作简单,界面和谐,有一定安全性(登陆过程)和可维护性,查询和计费准确快捷等。这些功能都在系统中实现,MFC将数据库的操作封装起来,通过用户对界面的操作产生相应的消息,从而进行相对应的消息处理并得出的结果。 2 关键技术分析 根据任务书及系统的要求,采用VC++6.0和Access 2000完成整个设计。用Access 2000作为后台数据库,并运用MFC技术和ADO技术等设计出简洁、易用的符合人们使用习惯的操作界面,完成书店图书销售系统的设计与实现。 2.1 MFC概述 2.1.1 MFC的宏观框架体系 MFC[1] [4]实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板等等。 这些模板都采用了以文档-视为中心的思想,每一个模板都包含一组特定的类。 为了支持对应用程序概念的封装,MFC内部必须作大量的工作。例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。虽然,这些内部处理对程序员来说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值