?? chap8_7.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->Add To Project->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 + -