前面我学习了文档视图机构之诞生。
诞生的过程中CDocManger,CDocTemplate,CRunTimeClass.这些机构发挥了重要的作用。CDocManger负责管理CDocTemplate.. CDocTemplate负责创建D/V/F结构。不过这个创建过程都需要CRunTimeClass帮助才能实现类动态创建。
这里我学习文档视图结构的基本运转。
文档视图机构的运转涉及到很多的内容。不过一个基本的内容就是文档的保存和文档打开。以及文档与视图的更新等内容。在这里我只讨论文档的保存和文档的更新。
何谓文档。一般会解释成数据,在MFC 中也会提供一个CDocment类。所以在我在我最初学习的时候误以为CDocment 是一个数据类。但是后来学习的过程当中发现其实CDocment其实不是数据类而是一个数据管理类。其将一般数据文档的特点例如是否修改,是否可以自动删除,保存与之相关联的模版和视图指针等所以CDocment 做不了什么事简单的说这是一个控制类一个数据控制类。
我通样CView也不是一个具体绘图的类它也是一个产所。它能它能捕作消息。发现数据更新等。但具体的绘图工作还是交给了DC/GDI 等对象来完成(如果使用OpenGL 那么具体的绘图功能则交给OpenGL来完成)
这样的话对于D/V结构我想我就有一个大概的想法。
CDocTemplate 是粘和剂的作用
CDocment 的作用是管理者的作用管理数据。方式是在CDocment中加子对象或者添加对象指针。为数据处理提供了一个统一的接口比如文件打开和文件关闭接口。
CView 是一个场所捕作大量的绘图消息并为绘图提供统一的绘图接口。
结下分析文件保存和文件的开发的流程。在这两个过程分成了两个过程一个类信息的保存和读入一个类数据信息的保存和读入。前者使用了CArchive类和CRunTimeClass 结构来完成。方法重载CArchive 操作函数<< 。MFC 会按照自己的方式将类信息存入。对于类数据信息则是调用Serialize函数由程序员自己写入数据写入。下面分别分析一下流程
文档保存的流程
1 CDocment的onFileSave 截获消息
2 然后给DoSave
3 然后给OnSaveDocument
4 在OnSaveDocument 产生CArchive
5 调用CDocment 的serilzie 函数
6 程序员写好数据写入方式。
文档打开的流程
1 这个过程要复杂一些
2 因为需要创建D/V/F三人组
3 然后的过程跟保存差不多。