博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
支持多个文档类型的文档视结构程序
阅读量:5971 次
发布时间:2019-06-19

本文共 1995 字,大约阅读时间需要 6 分钟。

要支持多种文档类型,可以在CWinApp派生类对象中创建和注册附加的CMultiDocTemplate对象。在MFC应用程序中,要增加附加的文档类型,步骤可分为五步。下面我们试着将文本编辑器加到绘图程序中。这样程序不仅支持绘图,还支持文本编辑功能。

(1)使用ClassWizard创建新的文档类和视图类:
  由于已经有了前面的文本编辑器程序,只需要将其中的文件拷贝过来就可以了,然后用Project->Add To Project->Files命令,将EditorDoc.h、EditorDoc.cpp、EditorView.h、EditorView.cpp加入到工程中。
(2)利用资源编辑器为新的文档类型增加新的字符串。
  先看看绘图程序的文档模板字符串结构。打开字符串编辑器,找到IDR_DRAWTYPE字符串,它是这样定义的:
\nDraw\nDraw\nDraw Files(*.drw)\n.drw\nDraw.Document\nDraw Document
  文档模板字符串包含7个由’\n’结尾并分隔的子串。如果子串不包含则‘\n’作为一个占位字符出现,最后一个字符串后面不需要‘\n’。这些子串描述了文档的类型,它们分别代表:
1.窗口标题:如Microsoft Word,该字符串仅出现在SDI程序中,对于多文档程序为空。因此IDR_DRAWTYPE以\n开头。
2.文档名:在用户从File菜单选取New菜单项时,建立新文档名。新的文档名使用这个文档名字符串作为前缀,后面添加一个数字,用作缺省的新文件名,如“Draw1”、“Draw2”等。如果没有指定,则使用“untitled”作为缺省值。
3.新建文档类型名:当应用程序支持多个文档类型时,该字符串显示在File New对话框中。如果没有指定,则无法用File-New菜单项创建该类型的文档。
4.过滤器名:允许指定与这个文档类型相关的描述。此描述显示在Open对话框中的Type下拉列表中。
5.过滤器后缀:与过滤器名一起使用,指定与文档类型相关的文件的扩展名。对于绘图程序我们在前面已经指定为“.drw”。
6.标注Windows维护的注册数据库中的文档类型Id。应用程序运行时会将该Id加入到注册数据库中。这样File Manager就可以通过Id和下面的注册文档类型名打开相应的应用程序。
7.注册文档类型名:存放在注册数据库中,标识文档类型的名字。
  现在我们要加入文本编辑器的文档模板字符串。在字符串编辑器中增加一个字符串资源,指定ID为IDR_EDITORTYPE,内容为:
\nEditor\nEditor\nEditor Files(*.txt)\n.txt\nEditor.Document\nEditor Document
(3)利用资源编辑器增加附加的图标和菜单资源。注意这些资源的ID必须同第二步中创建文档模板字符串中所用的ID相同。CMultiDocTemplate类利用该ID来识别与附加的文档类型相关的所有资源(包括图标、菜单等)。可以在打开Draw项目工作区文件后,用Project-Insert Project into Workspace将Editor工程文件加入到Draw项目工作区中。然后从Editor中拷贝资源到Draw工程并更名为IDR_EDITORTYPE。
(4)在应用程序类的InitInstance()方法中,创建另一个CMultiDocTemplate对象,并用CWinApp::AddDocTemplate()成员函数注册该模板对象。修改后的代码是这样的:
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_DRAWTYPE,
RUNTIME_CLASS(CDrawDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CDrawView));
AddDocTemplate(pDocTemplate);
 
CMultiDocTemplate* pDocTemplate2=new CMultiDocTemplate(IDR_EDITORTYPE,
RUNTIME_CLASS(CEditorDoc),
RUNTIME_CLASS(CMDIChildWnd),RUNTIME_CLASS(CEditorView));
AddDocTemplate(pDocTemplate2);
(5)最后,增加定制的串行化方法和绘图方法到新增的文档和视图类中。
对于CEditorDoc和CEditorView,这一步工作已经在前面做好了。
现在编译并运行程序。

转载地址:http://szzox.baihongyu.com/

你可能感兴趣的文章
屏幕分辨率的问题
查看>>
web.xml中filter,servlet和listener区别
查看>>
c# 使用Autodesk design Review API
查看>>
Linux用户权限acl配置
查看>>
NSString 去掉前后空格或回车符
查看>>
ant扩展应用的安装
查看>>
CentOS上使用libtld
查看>>
idea报错集锦
查看>>
MongoDB的安装和使用
查看>>
fix不抖动ie6
查看>>
SVN提交代码时全选文件
查看>>
Frament填坑
查看>>
Android下 scrollview的滚动停止事件的监听方法
查看>>
数据结构与算法之KMP算法02
查看>>
×××安全协议之IPsec
查看>>
用Unity3D的50个技巧:Unity3D最佳实践
查看>>
记录:C#编程中的字符串
查看>>
NEO从源码分析看NEOVM
查看>>
我的友情链接
查看>>
Btrfs入门(一)
查看>>