|
8.7 支持多个文档类型的文档视结构程序 要支持多种文档类型,可以在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’。这些子串描述了文档的类型,它们分别代表:
现在我们要加入文本编辑器的文档模板字符串。在字符串编辑器中增加一个字符串资源,指定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,这一步工作已经在前面做好了。 现在编译并运行程序。
作者: 不详, 来源: Visual C++王朝 |