📄 13.2.1 idr mainframe字符串资源.txt
字号:
13.2.1 IDR MAINFRAME字符串资源
除了可以在 OnNewDocument函数中修改文档标题以外,还可以通过 IDR MAINFRM字符串资源来
实现。打开Graphic程序的字符串资源表,可以看到其中有一个名为: IDR_MAINFRAME的字符串资源,
该资源字符串实际上是由 "\n"字符分隔的7个子串,如图 13.4所示。
图 13.4程序默认的IDR一MAINFRAME字符串资源
从图
13.4可以看到前两个'\n'字符之间没有任何内容,正因为如此,文档才没有标题,程序运行后,窗
口标题上显示的文档名称就是:"无标题"。之间添加一个标题,例如"Graphic",然后将先前添加的 中
加灰显示的那行代码)注释起来。
解
详
一…
我们可以在这两个"\n"字符
SetTitle语句(例 13-4所示代码
再次运行Graphic程序,可以看到这时程序窗口上文
档标题就变成了 "Graphic",如图 13.5所示。
那么 图 13.5IDR M γ一广一fd.. 通过修改IDR MAINFRAME字符串资源设置窗口的文档标题E字符
串资源是何时传递给程序的框架呢?在CGraphicApp类
的InitInstacne函数中,可以找到如例 13-5所示的这段代码。 f9~ 13-5
// Register the applicatio口 's docurnent templates . Document templates
/ / serve as the connection between documents , frame windows and views.
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CS工ngleDocTemplate( . IDR_MAINFRAME , RUNTIME_CLASS(CGraphicDoc} ,
RUNTIME_CLASS(CMainFrame} , // main SDI frame window
RUNT工ME_CLASS(CGraphicView}} ;
AddDocTemplate(pDocTemplate} ;
这段代码首先定义了一个单文档模板指针: pDocTemplate,然后构造单文档模板对象,该构造函数
的第一个参数是一个资源 ID: IDR_MAINFRAME,也就是说,这时把 IDR_MAINFRAME字符串资源传递
给单艾档模板对象。前面已经提过,一个资源B可以
。这里,这个ER-MAINFRAME资源不仅表示字符串资源,它还表示菜单
资源和图标资源。根据例 13-5所示代码,我们发现在构造单文档模板对象时,将文档类、
框架类、视类都作为参数传递给该对象,也就是通过单艾档模板对象将文档类、框架类、
视类对象关联在一起。接下来,程序调用 AddDocTemplate函数将己构造的文档模板对象
加入到应用程序的文档模板链巾,这时就把IDR MA剧F也咄伍字符串资源传递给应用程
序的框架了。对于我们所看到的 IDRMA则FRAME字符串资源,可以利用文档模板类 (Cdoc Template)
的成员函数: GetDocString来获取各个子串。该函数的声明形式如下所述:
virtual BOOL GetDocString( CString& rString, enurn DocStringlndex index } const;
该函数具有两个参数,其含义分别如下所述:
. rSstring
是一个 CString对象的引用,当函数返回时,该参数将包含要查找的子串。
. index
枚举类型。指定将要查找的子串的索引,可以指定表13.3中所列7个值之一,并且这 7个值的排列与
E字符串资源中各子串的排列顺序-致。
表13.3 IDR_MAINFRAME字符串资源中各子串的含义
取值 说明
CDocTemplate::windowTitle 主窗口标题栏上的字符串.仅在SO!程序出现. MDI程序将以
IDR_MAINFRAME 字符串为默认值
CDocTemplate:: docName 默认文档的名称.如果没有指定,默认文档的名称是"无标题"
CDocTemplate::fileNewName 文档类型的名称。如果应用程序支持多种类型的文档,此字符串将显
示在"File/New" 对话框中。如果没有指定,就不能够在 U FileINew"对话框处理这种文件
CDocTemplate::filterName 文档类型的描述和一个适用于此类型的通配符过滤器.这个字符串将
出现在 " FilelOpen"对话框中的文件类型列表框中。要和CDocTemplate::fileterExt一起使用
CDocTemplate::fileterExt 文档的扩展名。如果没有指定,就不能够在 "FHdOpen"对话框中处理这
种文档。 要和CD田Template: :filterName一起使用
CDocTemplate::而且FileTypeld 如果你以 RegisterShellFileTypes向系统的注册表注册文件类
型,此值会出现在 HKEY_CLASSES_ROOT之下成为其子项,并仅供Windows内部使用。如果没有指定,
这种文件类型就无法注册
CDocTemplate::regFileTypeName 这也是存储在注册表中的文件类型名称。它会显示于程序中用以
访问注册袤的对话 板内
因此,如果把 Graphic程序的 IDR MA E字符串资源中第一个子串替换为: "h即://www.sunxin.org",
然后再次运行Graphic程序,就可以看到该程序主框架窗口的标题变成了: http://www.sunxin.org,
如图 13.6所示。
E豆-iHd!Jj刀……卢刚M叮叮 A坦i三l
文阳已-毡J董雹(到精蚁ω串串E文件愤~
ICl s困!品悔自 181t l
就蜡广1士T五
图 13.6通过修改IDR_MAINFRAME字符串资源设置主窗口的标题
上面的程序已经把 IDR MAINFRAME字符串资源中第二个子串设置为"Graphic", 因此程序运行时,主
窗口上文档的标题为: Graphic (如图 13.6所示〉。并且当我们单击【文件\保存】菜单命令保存文
档时,默认的文档名称为: Graphic,如图 13.7所示。
如果希望程序能够支持多种类型的文挡,就可以在CGraphicApp类的Initlnstacne函数中,像上面例
13-5所示代码段一样,再去构造一种新的文档模板,并调用AddDocTemplate函数将这个新的文档模
板添加到应用程序的文档模板链中,这样,在 IDR M 字符串资源的第三个子串巾指定的文档类型名
称将出现在 "File肘ew"对话框中。
.
立f三j
俱盹电): r甸Graphi <= 3←白d因 ·
21口血酬
僻姐∞!所有立件(叫 3
图 13.7
IDR一MAINFRAME字符串资源的第四个子串是对文档类型的描述和一个适用于此类型的通配符过滤
器,该子串应该与第五个子串一起使用。因为本例中,这个字符串是空的,所以当Graphic程序运行
后,单击【文件\打开】菜单项时,将出现如图 13.8所示的打开对话框,可以发现此时文件类型下
图 13.8默认的文件打开对话框
下面,修改Graphic程序中 IDRMA剧FRAME
为: " Text Files(*.txt)",并将第五个子串设置为:
【文
件\打开】菜单项,程序将弹出如图
拉列表框中有了一个 "Text
就只能看到文本文件。
|η开 γ有理
.!lil
础范围ω: r甸Graphi c 3+-l!:ld'圈,
Debl咱
res
1.txt
Rea<如幅.txt
文件名(J): r 巳亘马
酬i
图 13.9修改IDR_MAINFRAME字符串第四个子串设置文件打开对话框中的文件类型选项
.
" I 489
第 13章文档与串行化
然后,当选择【文件\保存】菜单项时,在随后打开的保存为对话框中,可以看到程序自动为文件添
加了一个后缀 : .txt (如图 13.10所示〉。这是因为我们在 IDR MA剧FRAME字符串资源的第 5个子
串中设置了文件默认的后缀名 : .txt0
民刊型堕咀工J三l 保存在 ω国Gr ..phi c: 3 ← l!;)c1国·
文件名咂〉圄葡-瞄|事 !Sl I 保相望(I) : I T..:t.民川 3棚:u
图 13. 10 IDR MAINFRAME字符串资源的第 5个子串设置保存文件时文件默认的后缀名
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -