友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
深入浅出MFC第2版(PDF格式)-第57部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
#0139 BEGIN
#0140 ID_FILE_NEW 〃Create a new documentnNew〃
#0141 ID_FILE_OPEN 〃Open an existing documentnOpen〃
#0142 ID_FILE_CLOSE 〃Close the active documentnClose〃
#0143 ID_FILE_SAVE 〃Save the active documentnSave〃
#0144 。。。
#0145 END
291
…………………………………………………………Page 354……………………………………………………………
第篇 欲善工事先利其器
好,我曾经说过,这个程序漂亮归漂亮,可什么也没做。我知道MFC 中有一个CEditView
类别,具有文字编辑功能,我打算从那里继承我的View (现在的你还不了解什么是View ,
没关系)。于是我重来一次,一切都相同,只在AppWizard 的步骤六中设定CScribbleView
的【Base class:】为CEditView:
这次我获得这样一个程序:
292
…………………………………………………………Page 355……………………………………………………………
第4章 Visual C++ 整合性軟體開發環境
天啊,它不但有文字编辑功能,更有令人匪夷所思的打印功能和预视功能,也可以读写
文字文件。
体会惊人的生产力了吗?
注意:在MFC AppWizard 的步骤6中把CScribbleView 的基础类别由CView 改为
CEditView,会造成源代码如下的变化(粗体部份):
// in ScribbleView。h
class CScribbleView : public CEditView
{
。。。
}
// in ScribbleView。cpp
IMPLEMENT_DYNCREATE(CScribbleView; CEditView)
BEGIN_MESSAGE_MAP(CScribbleView; CEditView)
。。。
ON_MAND(ID_FILE_PRINT; CEditView::OnFilePrint)
ON_MAND(ID_FILE_PRINT_DIRECT; CEditView::OnFilePrint)
ON_MAND(ID_FILE_PRINT_PREVIEW; CEditView::OnFilePrintPreview)
END_MESSAGE_MAP()
// ScribbleView。cpp 中所有原先为CView 的地方,都被更改为CEditView
// in ScribbleDoc。cpp
void CScribbleDoc::Serialize(CArchive& ar)
{
// CEditView contains an edit control which handles all serialization
((CEditView*)m_viewList。GetHead())…》SerializeRaw(ar);
}
293
…………………………………………………………Page 356……………………………………………………………
第篇 欲善工事先利其器
威力强大的资源编辑器
AppWizard 做出来的骨干程序带给我们Windows 程序的标准UI 接口。为了个人需
求,你当然会另外加上一些资源,这时候你得准备启用资源编辑工具了。如果你曾经是
Visual C++ 的使用者,当记得曾有一个名为AppStudio 的多效合一资源编辑工具。是
了,但现在不再有AppStudio ,不再有独立的资源编辑工具,而是与Visual C++ 整合环
境做了更密切的结合。
我将对这个工具提供的各种资源编辑功能逐一简介,并以实例展示如何在应用程序中加
入新的资源项目。
资源的编辑,虽然与「正统」程序设计扯不上关系,但资源在Windows 程序所占的份
量,众所周知。运用这些工具,仍然是你工作中重要的一环。VC++ 的Online 手册上有
颇为完整的介绍;本章不能取代它们的地位,只是企图给你一个整体概观。以下是出现
在InfoView 窗口中的Developer Studio Environment User’s Guide 目录:
294
…………………………………………………………Page 357……………………………………………………………
第4章 Visual C++ 整合性軟體開發環境
打开一个项目后,你可以从其ResourceView 窗口中看到所有的资源。想要编辑哪一个
资源,就以鼠标双击之。如果要产生新的资源,整合环境的工具栏上有一整排的按钮等
着你按。这个「资源工具栏」是选择性的,你可以按下整合环境的【Tools/Customize】
菜单项目,再选择【Toolbar 】附页(或是直接在工具栏区域中按下鼠标右键),从中决
定要看到或不看到哪些工具栏。
选按其中任何一个纽,立刻会有一个适当的编辑器跳出来向你说哈!
当然你可以用PE2 老古董直接编辑RC 档,但整合环境的好处是它会自动处理ID 号
码,避免重复的情况发生,新的ID 并会自动放到你的RESOURCE。H 档中。总之就如
我说过的,这些工具的目的在使你专注于最主要的工作上,至于各文件间的关联工作,
枝枝节节的琐碎事情,都由工具来完成。这,才叫作「整合性」工具环境嘛!
Icon 编辑器
Icon、Cursor、Bitmap 和Toolbar 编辑器使用同一个心脏:它们架构在同一个图形编辑器
上,操作大同小异。过去这个心脏曾经遗漏两项重要功能,一是256 色图形支持,一是
「敲入文字就出现对应之Bitmap 」工具(这种工具允许使用者将文字直接键入一张
bitmap 中,而不是一次一个图素慢慢地描)。自从Visual C++ 4。0 之后这两项重要功能
就已经完全补齐了。
请注意工具箱(图最右侧)在不同的编辑器中稍有变化。
295
…………………………………………………………Page 358……………………………………………………………
第篇 欲善工事先利其器
选按图左ResourceView 中的一个Icon,于是右侧出现Icon 编辑器。
Cursor 编辑器
选按图左ResourceView 中的一个Cursor,于是右侧出现Cursor 编辑器。
296
…………………………………………………………Page 359……………………………………………………………
第4章 Visual C++ 整合性軟體開發環境
Bitmap 编辑器
选按图左ResourceView 中的一张Bitmap,于是右侧出现Bitmap 编辑器。注意,本图的J。J。Hou
字样并非一点一点描绘而成,而是利用绘图工具箱(图最右)中的字形产生器(标有A 字形的那
个图标)。它不但能够产生各种字形变化(视你安装的字形种类而定),在中文环境下更能够输入
中文字!不过我还没有找到能够调整字形大小的功能。
工具栏 (Toolbar)编辑器
Visual C++ 早期版本没有这个编辑器,因为,工具栏原本不算是RC 档中的一份资源。
而且,说穿了工具栏其实只是靠一张由固定大小之格状单元组成的一单张bitmap 构
成,编辑工具栏其实就是编辑该张bitmap 。但是那样一来,我们就得自己改写程序代码中
有关于工具栏的设定部份,编辑程序显得不够一气呵成!
自从Visual C++ 4。0 开始,这中一切琐事就都由工具代劳了。我将在第7章详细解释「工
具列」资源如何在程序中发生效用。
297
…………………………………………………………Page 360……………………………………………………………
第篇 欲善工事先利其器
选按图左ResourceView 中的一份Toolbar,于是右侧出现Toolbar 编辑器。
把上图局部放大来看:
298
…………………………………………………………Page 361……………………………………………………………
第4章 Visual C++ 整合性軟體開發環境
VERSIONINFO 资源编辑器
VERSIONINFO 可帮助程序判断存在于使用者系统中的文件版本号码,如此一来就不会
发生「以旧版本程序改写新格式之文件」的遗憾了。VERSIONINFO 资源也放在RC 档,
包含的资料可以识别版本、语言、操作系统、或含有资源之DLL 。AppWizard 会为你产
生一份VERSIONINFO 资源, 但不强制你用它。下面是Scribble。rc 档中有关于
VERSIONINFO 的内容:
#0001 VS_VERSION_INFO VERSIONINFO
#0002 FILEVERSION 1;0;0;1
#0003 PRODUCTVERSION 1;0;0;1
#0004 FILEFLAGSMASK 0x3fL
#0005 #ifdef _DEBUG
#0006 FILEFLAGS 0x1L
#0007 #else
#0008 FILEFLAGS 0x0L
#0009 #endif
#0010 FILEOS 0x4L
#0011 FILETYPE 0x1L
#0012 FILESUBTYPE 0x0L
#0013 BEGIN
#0014 BLOCK 〃StringFileInfo〃
#0015 BEGIN
#0016 BLOCK 〃040904B0〃
#0017 BEGIN
#0018 VALUE 〃panyName〃; 〃0〃
#0019 VALUE 〃FileDescription〃; 〃SCRIBBLE MFC Application0〃
#0020 VALUE 〃FileVersion〃; 〃1; 0; 0; 10〃
#0021 VALUE 〃InternalName〃; 〃SCRIBBLE0〃
#0022 VALUE 〃LegalCopyright〃; 〃Copyright 251 19960〃
#0023 VALUE 〃LegalTrademarks〃; 〃0〃
#0024 VALUE 〃OriginalFilename〃;〃SCRIBBLE。EXE0〃
#0025 VALUE 〃ProductName〃; 〃SCRIBBLE Application0〃
#0026 VALUE 〃ProductVersion〃; 〃1; 0; 0; 10〃
#0027 END
#0028 END
#0029 BLOCK 〃VarFileInfo〃
#0030 BEGIN
#0031 VALUE 〃Translation〃; 0x409; 1200
#0032 END
#0033 END
299
…………………………………………………………Page 362……………………………………………………………
第篇 欲善工事先利其器
选按图左ResourceView 中的一份VersionInfo,于是右侧出现VersionInfo 编辑器。你可以直
接在每一个项目上修改字符串内容。
String Table
字串表格 ( )编辑器
字符串表格编辑器非常好用,允许你编辑RC 文件中的字符串资源(STRINGTABLE ),这可
增进国际化的脚步。怎么说?我们可以把程序中出现的所有字符串都集中在RC 文件的字符串
表格,日后做中文版、日文版、法文版时只要改变RC 文件的字符串表格即可。噢当然,你
还得选一套适当的mon Dialog DLL 。
AppWizard 为我们制作骨干程序时不是加了一大套Menu 吗,对应于这些Menu ,有数
以打计的字符串资源,准备给状态列使用。下面是RC 文件字符串表格的一小部份:
STRINGTABLE DISCARDABLE
BEGIN
ID_INDICATOR_EXT 〃EXT〃
ID_INDICATOR_CAPS 〃CAP〃
ID_INDICATOR_NUM 〃NUM〃
ID_INDICATOR_SCRL 〃SCRL〃
ID_INDICATOR_OVR 〃OVR〃
ID_INDICATOR_REC 〃REC〃
END
300
…………………………………………………………Page 363……………………………………………………………
第4章 Visual C++ 整合性軟體開發環境
STRINGTABLE DISCARDABLE
BEGIN
ID_FILE_NEW 〃Create a new documentnNew〃
ID_FILE_OPEN 〃Open an existing documentnOpen〃
ID_FILE_CLOSE 〃Close the active documentnClose〃
ID_FILE_SAVE 〃Save the active documentnSave〃
ID_FILE_SAVE_AS 〃Save the active document with a new namenSave As〃
。。。
选按图左ResourceView 中的一个String Table,于是右侧出现String Table 编辑器。你可以直
接在每一个字符串上修改内容。
菜单 (Menu)编辑器
菜单编辑器很好用。你可以一边看到正在建立的菜单,一边直接在适当位置键入菜单项
目名称, 窗体编辑器会把菜单项目的ID 值(当然是它自动为你产生的) 放到
RESOURCE。H 的#define 叙述中,就像字符串表格编辑器所做的那样。重新安排菜单项目
的位置也很容易,因为所有动作都可以鼠标拖拉方式完成。
301
…………………………………………………………Page 364……
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!