按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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〃; 〃