按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
生成是怎么一回事儿,现在正是复习第3章的时候。我将在第8章带你实际看看
Document Template 的内部动作。
前面曾提到,我们在CMultiDocTemplate 构造式的第一个参数置入IDR_SCRIBTYPE,
代表RC 文件中的菜单(MENU )、图标(ICON )、字符串(STRING )三种资源,其中又
以字符串资源大有学问。这个字符串以'n' 分隔为七个子字符串,用以完整描述文件类型。七
个子字符串可以在AppWizard 的步骤四的【Advanced Options 】对话框中指定:
432
…………………………………………………………Page 495……………………………………………………………
第7章 簡單而完整:MFC 骨幹程式
RC 文件中的字符串资源
IDR_MAINFRAME ::
::
〃Scribble Step0〃
(
IDR_SCRIBTYPE 7 个 子 字 串 ):
((
n
Scribn
Scribn
Scribble Files (*。scb)n
。SCBn
Scribble。Documentn
Scrib Document
每一个子字符串都可以在程序进行过程中取得,只要调用CDocTemplate::GetDocString 并
在其第二参数中指定索引值(1~7)即可,但最好是以CDocTemplate 所定义的七个常数
代替没有字面意义的索引值。下面就是CDocTemplate 的7个常数定义:
// in AFXWIN。H
class CDocTemplate : public CCmdTarget
{
。。。
enum DocStringIndex
{
windowTitle; // default window title
docName; // user visible name for default document
fileNewName; // user visible name for FileNew
// for file based documents:
filterName; // user visible name for FileOpen
filterExt; // user visible extension for FileOpen
// for file based documents with Shell open support:
regFileTypeId; // REGEDIT visible registered file type identifier
regFileTypeName // Shell visible registered file type name
};
。。。
};
433
…………………………………………………………Page 496……………………………………………………………
第篇 湷觥 FC 程式設計
所以,你可以这么做:
CString strDefExt; strDocName;
pDocTemplate…》GetDocString(strDefExt; CDocTemplate::filterExt);
pDocTemplate…》GetDocString(strDocName; CDocTemplate::docName);
七个子字符串意义如下:
index 意义
1。 CDocTemplate::windowTitle 主窗口标题栏上的字符串。SDI 程序才需要指定它,MDI 程
式不需要指定,将以IDR_MAINFRAME 字符串为默认值。
2。 CDocTemplate::docName 文件基底名称(本例为〃Scrib〃)。这个名称再加上一个流
水号码,即成为新文件的名称(例如〃Scrib1〃)。如果此
字符串未被指定,文件预设名称为〃Untitled〃。
3。 CDocTemplate::fileNewName 文件类型名称。如果一个程序支持多种文件,此字符串将显
示在【File/New 】对话框中。如果没有指明,就不能够在
【File/New 】对话框中处理此种文件。本例只支持一种文
件类型,所以当你选按【File/New 】,并不会出现对话框。
第13 章将示范「一个程序支持多种文件」的作法(#743
页)。
4。 CDocTemplate::filterName 文件类型以及一个适用于此类型之万用过滤字符串
(wildcard filter string) 。本例为〃Scribble(*。scb)〃。这个字符串
将出现在【File Open 】对话框中的【List Files Of Type】列
示盒中。
5。 CDocTemplate::filterExt 文件档之扩展名,例如〃scb〃。如果没有指明,就不能够
在【File Open 】对话框中处理此种文件档。
6。 CDocTemplate::regFileTypeId 如果你以::RegisterShellFileTypes 对系统的登录数据库
(Registry )注册文件类型,此值会出现在
HKEY_CLASSES_ROOT 之下成为其子机码(subkey )并
仅供Windows 内部使用。如果未指定,此种文件类型就
7。 无法注册,鼠标拖放(drag and drop) 功能就会受影响。
CDocTemplate::regFileTypeName 这也是储存在登录数据库(Registry )中的文件类型名称,
并且是给人(而非只给系统)看的。它也会显示于程序中
用以处理登录数据库之对话框内。
434
…………………………………………………………Page 497……………………………………………………………
第7章 簡單而完整:MFC 骨幹程式
以下是Scribble 范例中各个字符串出现的位置:
1 CDocTemplate::windowTitle
3 出现在p。743 的【New】对话框中
2 CDocTemplate::docName
5 CDocTemplate::filterExt
4 CDocTemplate::filterName
7 CDocTemplate::regFileTypeName
6 CDocTemplate::regFileTypeId
我必须再强调一次,AppWiza