第2节  基于文档模板架构的序列化存储

更新于 2026年10月10日 版权声明
第2节 基于文档模板架构的序列化存储

“模板”提供一种固定的样式,其大部分内容都是内部开发好了的,开发者只要作少量修改即可快速生成功能强大的软件。文档模板类(CDocTemplate)将视图类(CView)、文档类(CDocument)和框架类(CFrameWnd)捆绑在一起。文档模板将类型信息在注册表中进行注册,使得在双击文档类型的文件时,操作系统根据注册信息找到执行文件启动进程并加载该文档。

创建一个工程名为“md”的MDI程序,开发基于文档模板架构的绘图软件。

1)在向导第1步,选择多文档和文档视图框架,如图13-8所示。

图示

图13-8 创建文档视图架构的程序

2)在向导第4步,单击“Advanced”按钮填写文档信息,如图13-9所示。

图示

图13-9 文档模板设置

3)在向导第5步,单击“As a statically linked library”,选择静态链接MFC类库模式,如图13-10所示。

图示

图13-10 MFC应用程序向导

4)在MFC应用程序向导最后一步,选择CScrollView作为视图类,如图13-11所示。

图示

图13-11 选择视图基类(共有8个类可选)

5)在ResourceView中修改工具栏资源,添加一些工具按钮,如图13-12所示。

图示

图13-12 编辑工具栏资源

6)部分工具栏按钮ID见表13-2。

表13-2 部分工具栏按钮ID

图示

7)在类视图中添加一个普通类CLayer(无基类),如图13-13所示。

图示

图13-13 通过右键菜单添加新类

8)修改CLayer类的头文件,使其成为一个抽象类。

图示

图示

9)在类视图中添加一个CLayer类的派生类用于处理矩形图层,如图13-14所示。

图示

图13-14 添加派生类

10)修改CRectan类的头文件,重写所有基类中的虚函数并添加成员变量。

图示

图示

11)修改CRectan类的源文件,编写所有类成员函数的代码。

图示

图示

12)修改CLayer类的源文件。

图示

图示(https://www.daowen.com)

13)修改CMdView类的头文件,添加一些成员变量。

图示

14)修改CMdView类的初始化函数OnInitialUpdate。

图示

15)在CMdView类添加所有工具的消息映射函数(包括COMMAND和UPDATE_COMMAND_ UI),如图13-15所示。

图示

图13-15 添加工具栏按钮的消息映射函数

16)修改添加的消息映射函数的代码。

图示

图示

17)修改CMdDoc类的头文件,添加管理图层信息的成员变量。

图示

18)在CMdView类中添加一些鼠标消息映射函数,如图13-16所示。

图示

图13-16 添加消息映射函数

19)修改建立的所有消息映射函数的代码。

图示

图示

图示

20)修改OnDraw函数的代码。

图示

21)在CMdDoc类中修改序列化函数的代码。

图示

图示

22)在CMdDoc类中,添加虚函数DeleteContents并修改代码。

图示

23)编译并运行,测试代码,如图13-17所示。

图示

图13-17 查看运行结果

每次绘制新的矩形或者拖动一个矩形,关闭时都会提示是否保存。通过打开菜单、最近文件以及单击工具栏按钮等,都能够打开保存过的.md文件。甚至双击保存好的.md文件,或者把文件拖到框架上面,也能自动打开一个文档。

CDocument类最常用的虚函数回调如下。

①CDocument::OnNewDocument:创建新文档时回调。

②CDocument::OnCloseDocument:关闭文档时回调。

③CDocument::OnOpenDocument:打开已存在的文档时回调。

④CDocument::OnSaveDocument:保存文档到硬盘时调用。

⑤CDocument::DeleteContents:需要清理文档数据时调用。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)