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

📄 chap8_7.htm

📁 MFC开发基础教程
💻 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>
</head>

<body link="#3973DE" alink="#3973DE">
<font SIZE="5"><b><div align="center"><center>

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

<p ALIGN="CENTER"></b><font SIZE="5"> </font><font FACE="Times New Roman" SIZE="5"></p>
</font><font FACE="Times New Roman" SIZE="3">

<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
</font></b>

<p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>

<p></font> </p>
</body>
</html>

⌨️ 快捷键说明

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