⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap8_7.htm

📁 VC++编程实例。非常详细
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>8.7 支持多个文档类型的文档视结构程序</title>
<link rel="stylesheet" href="../../../cpcw.css"></head>

<body link="#3973DE" alink="#3973DE" background="../../bg.gif">
<div align="center"><center>
    <table width="85%" border="0">
      <tr bgcolor="#FFFFFF"> 
        <td> 
          <div align="center">
            <center>
            </center>
          </div>
          <p align="CENTER"><b><font color="red">8.7 支持多个文档类型的文档视结构程序</font></b></p>
          <p>   要支持多种文档类型,可以在CWinApp派生类对象中创建和注册附加的CMultiDocTemplate对象。在MFC应用程序中,要增加附加的文档类型,步骤可分为五步。下面我们试着将上一章的文本编辑器加到绘图程序中。这样程序不仅支持绘图,还支持文本编辑功能。</p>
          <p> (1)使用ClassWizard创建新的文档类和视图类:</p>
          <p>   由于已经有了前面的文本编辑器程序,只需要将其中的文件拷贝过来就可以了,然后用Project-&gt;Add To Project-&gt;Files命令,将EditorDoc.h、EditorDoc.cpp、EditorView.h、EditorView.cpp加入到工程中。</p>
          <p> (2)利用资源编辑器为新的文档类型增加新的字符串。</p>
          <p>   先看看绘图程序的文档模板字符串结构。打开字符串编辑器,找到IDR_DRAWTYPE字符串,它是这样定义的:</p>
           
          <p>\nDraw\nDraw\nDraw Files(*.drw)\n.drw\nDraw.Document\nDraw Document</p>
          
          <p>  文档模板字符串包含7个由’\n’结尾并分隔的子串。如果子串不包含则‘\n’作为一个占位字符出现,最后一个字符串后面不需要‘\n’。这些子串描述了文档的类型,它们分别代表:</p>
          <blockquote> 
            <p> 1.窗口标题:如Microsoft 
              Word,该字符串仅出现在SDI程序中,对于多文档程序为空。因此IDR_DRAWTYPE以\n开头。</p>
            <p> 2.文档名:在用户从File菜单选取New菜单项时,建立新文档名。新的文档名使用这个文档名字符串作为前缀,后面添加一个数字,用作缺省的新文件名,如“Draw1”、“Draw2”等。如果没有指定,则使用“untitled”作为缺省值。</p>
            <p> 3.新建文档类型名:当应用程序支持多个文档类型时,该字符串显示在File 
              New对话框中。如果没有指定,则无法用File-New菜单项创建该类型的文档。</p>
            <p> 4.过滤器名:允许指定与这个文档类型相关的描述。此描述显示在Open对话框中的Type下拉列表中。</p>
            <p> 5.过滤器后缀:与过滤器名一起使用,指定与文档类型相关的文件的扩展名。对于绘图程序我们在前面已经指定为“.drw”。</p>
            <p> 6.标注Windows维护的注册数据库中的文档类型Id。应用程序运行时会将该Id加入到注册数据库中。这样File 
              Manager就可以通过Id和下面的注册文档类型名打开相应的应用程序。</p>
            <p> 7.注册文档类型名:存放在注册数据库中,标识文档类型的名字。</p>
          </blockquote>
          <p>   现在我们要加入文本编辑器的文档模板字符串。在字符串编辑器中增加一个字符串资源,指定ID为IDR_EDITORTYPE,内容为:</p>
           
          <p>\nEditor\nEditor\nEditor Files(*.txt)\n.txt\nEditor.Document\nEditor 
            Document</p>
          
          <p>(3)利用资源编辑器增加附加的图标和菜单资源。注意这些资源的ID必须同第二步中创建文档模板字符串中所用的ID相同。CMultiDocTemplate类利用该ID来识别与附加的文档类型相关的所有资源(包括图标、菜单等)。可以在打开Draw项目工作区文件后,用Project-Insert 
            Project into Workspace将Editor工程文件加入到Draw项目工作区中。然后从Editor中拷贝资源到Draw工程并更名为IDR_EDITORTYPE。</p>
          <p> (4)在应用程序类的InitInstance()方法中,创建另一个CMultiDocTemplate对象,并用CWinApp::AddDocTemplate()成员函数注册该模板对象。修改后的代码是这样的:</p>
           
          <p>CMultiDocTemplate* pDocTemplate;</p>
          <p>pDocTemplate = new CMultiDocTemplate(</p>
          <p>IDR_DRAWTYPE,</p>
          <p>RUNTIME_CLASS(CDrawDoc),</p>
          <p>RUNTIME_CLASS(CChildFrame), // custom MDI child frame</p>
          <p>RUNTIME_CLASS(CDrawView));</p>
          <p>AddDocTemplate(pDocTemplate);</p>
          
          <p><b> </b></p>
          <b> 
          <p>CMultiDocTemplate* pDocTemplate2=new CMultiDocTemplate(IDR_EDITORTYPE,</p>
          <p>RUNTIME_CLASS(CEditorDoc),</p>
          <p>RUNTIME_CLASS(CMDIChildWnd),RUNTIME_CLASS(CEditorView));</p>
          <p>AddDocTemplate(pDocTemplate2);</p>
          </b>
          <p> (5)最后,增加定制的串行化方法和绘图方法到新增的文档和视图类中。</p>
          <p> 对于CEditorDoc和CEditorView,这一步工作已经在前面做好了。</p>
          <p> 现在编译并运行程序。</p>
          <div align="center">
            <center>
              <table border="0" cellpadding="0" cellspacing="0" width="615">
                <tr> 
                  <td><a href="chap8_6.htm">上一页</a></td>
                  <td>
                    <p align="right"><a href="chap8_8.htm">下一页</a>
                  </td>
                </tr>
              </table>
              <p><a href="http://www.cpcw.com">电脑报首页</a> <a href="../../index.htm">网络学院首页</a></p>
            </center>
          </div>
          <hr noshade color="#3973DE" size="1">
          
          <p align="center">本教程由<a href="http://vcdynasty.yeah.net">Visual C++王朝(Where 
            programmers come together)</a>协助制作<br>
            未经许可,请勿以任何形式复制
        </td>
      </tr>
    </table>
    
  </center>
</div>

</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -