没有合适的资源?快使用搜索试试~ 我知道了~
在Visual C++中定制AppWizard.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 141 浏览量
2022-11-12
03:54:32
上传
评论
收藏 1.01MB PDF 举报
温馨提示
试读
25页
。。。
资源推荐
资源详情
资源评论
在 Visual C++ 中定制 AppWizard
第一部分 AppWizard 及其工作原理
AppWizard 即应用程序向导,它是Visual Studio 开发环境中强大的编程工具之一,用它可以
创建各种不同类型的程序。比如 Win32 应用、ATL、MFC 应用等等。在 Windows 的术语中,
向导(wizard)一词指得是一个应用程序,它的一个主要特点就是提供一系列对话框引导用
户进行必要的选择来完成给定的任务。VC 中的应用程序向导——AppWizard 提供一系列特
定工程类型对话框来让程序员定义各种类型的新工程。其中每一个对话框都显示一些用来指
定工程类型的选项。例如,用 AppWizard 创建 Windows DLL 的时候,第一个对话框让程序
员指定诸如要创建什么类型的 DLL,是常规类型还是 MFC 扩展类型,是否要包括自动化支
持,以及要不要源代码注释等等。
根据程序员所填充的对话框,AppWizard 会自动创建构造工程所需的框架文件,它们包括:
工程文件、工作间文件、源代码文件、头文件、资源文件等等。AppWizard 是 Visual Studio
开发环境中使用最多的工具之一。尽管如此,AppWizard 也有它的不足之处。那就是常用的
工程类型都是内建在 Visual Studio 中,无法创建自己的 AppWizard。自从有了 Custom
AppWizard(Visual C++ 4.0)以后,这个问题得到了解决。Custom AppWizard也就是定制的
AppWizard。在创建类似的多个工程时,Custom AppWizards 显得特别有用。例如你创建的
工程都是 SDI,并且都支持自动化( automation),那么你就可以创建一个自己定制的
AppWizard,将 SDI 自动化设为默认选项。这样可以提高工作效率。此外,利用 Custom
AppWizard 也可以创建具有个性化的工程。例如你想要所有工程都有一个“关于”对话框,
并且在这个对话框中显示个人信息或者公司的标徽及其它专有信息,每个源代码文件中都加
上自己的专门注释。那么通过创建一个 Custom AppWizard 很容易实现这个需求。你甚至可
以定义并显示自己定制的对话框来收集工程类型所需的信息和选项。本文的第一部分我们将
讨论 AppWizard 的工作原理,然后在后续部分中循序渐进地学习如何创建 Custom
AppWizard。最终我们将创建一个在实际编程中非常实用的 Custom AppWizard。并提供全部
源代码。
在学会使用 Custom AppWizard之前,首先必须了解 AppWizard 的工作原理,理解 AppWizard
是如何根据不同的用户选择来创建工程的。
AppWizard 有一个管理装置(manager),它不是一个单独的应用程序。Custom AppWizard
运行 于 Visual Studio 框架之中 。 AppWizard 的这个所 谓的“管理器 ”,实际 上就是
MFCAPWZ.DLL,它控制不同的 AppWizard 执行。在创建新工程的对话框中,“Project”标
签是默认的选项,列表框中显示出内建的工程类型。此外,这个列表框中还列出用户定制的
AppWizard,如图一所示。
图一
这些定制 AppWizard 文件扩展名为*.awx,它们存放在一个特定的目录中。如果安装 VC6.0
时是按照默认的路径安装的,则定制的 AppWizard 文件在成功编译后都会被存放到\Program
Files\Microsoft Visual Studio\Common\MSDev98\Template文件夹中。注意列表框中此新的列
表项“MFC AppWizard (exe) – VC 知识库”,这就是我们后面要定制的 AppWizard。从这
里可以看出,只要产生了 *.awx 文件,那么它就会与标准的(或者说内建的) Visual C++
AppWizard 一起自动显示在这个列表框中。
——CCustomAppWiz 类和 Dictionary 字典
CCustomAppWiz 基类提供了 MFCAPWZ.DLL 和 Custom AppWizard 之间的通讯服务。
CCustomAppWiz()成员函数的实现就在 MFCAPWZ.DLL 中。为了实现特定应用的行为,你
只要从 CCustomAppWiz 派生一个类,改写相应的虚拟函数,然后在 MFCAPWZ.DLL 运行
时调用 SetCustomAppWizClass()函数注册派生类即可。
通常,AppWizard 显示一系列对话框获取创建新工程所需的设置。每一个步进对话框显示不
同的选项。AppWizard 将这些选项的值存储在一个串映射中。这个串映射就叫做 Dictionary
字典。Dictionary 字典实际上是一个 CCustomAppWiz 类的成员变量(m_Dictionary),其类
型为 CMapStringToString。Dictionary 将 AppWizard 宏映射到相关联的值。这里所说的宏是
指工程选项或设置的名称。例如,在创建MFC 的时候,你可以选择应用程序为SDI,那么,
Dictionary 中就会有一个名为 PROJTYPE_SDI 的宏。Dictionary 中这个项目的值就是 1,否
则这个与这个宏关联的值为 0。
m_Dictionary 成员变量可以被用于创建宏,删除宏或者更新宏的值。因为 m_Dictionary 是一
个 CMapStringToString 对象,肯定有相应的成员函数存取不同宏的值。下面的代码返回
PROJTYPE_SDI 宏的值,它被用于判断这个工程是不是一个 SDI 应用。
m_Dictionary.Lookup("PROJTYPE_SDI", m_strProjType);
if (_T("1") == m_strProjType)
{
// SDI 类型应用
}
else // 其它类型的程序
{
}
MFCAPWZ.DLL 提供了一些标准宏,任何其它定制 AppWizard 所需要的宏都可以用 SetAt
函数添加到 Dictionary 字典中。你从在线文档中可以找到六十多个标准宏
当你创建 Custom AppWizard并按下 Finish 按钮后,MFCAPWZ.DLL 用 Dictionary 创建新的
工程文件。每一个 AppWizard(不论是标准的还是定制的)都有一套模板文件用于创建
AppWizard 生成的工程源文件。Dictionary 中的值被用于与模板文件相连接来创建最终的输
出(新的工程文件) 。下面是一个例子,中文的基于对话框程序的模板资源文件名叫
DlgLoc_chs.rc。下面是从中摘录出的一段:
...
IDD_ABOUTBOX DIALOGEX 0, 0, 160, 129
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "关于$$ROOT$$"
...
注意这里 $$ROOT$$ 串的用法。当 MFCAPWZ.DLL 创建新工程文件时,它首先扫描每一
个模板,查找以$$开始并以$$结尾的串。在这两个前缀和后缀之间的文本串叫做占位苻。每
一个占位符是 Dictionary 中一个宏的名字。MFCAPWZ.DLL 在 Dictionary 中查询占位符的值
并用这个值替换占位符。当所有的占位符都被 Dictionary 中相应的值替换之后,工程文件也
就产生了。
——用 MFCAPWZ.DLL 替代占为符
为了理解 MFCAPWZ.DLL 用 Dictionary 中宏的值替换模板文件的占位符。我们来做一个实
验:
1、 用 AppWizard 创建一个基于对话框的应用程序,将工程取名为 MyTestDlgApp。
2、 创建完工程之后,以文本方式打开 MyTestDlgApp.rc 文件。
3、 找到 IDD_ABOUT 的对话框模板资源。
4、 你应该看到原来模板文件中$$ROOT$$占位符已经被工程的名字(MyTestDlgApp)替换
掉了。这是因为 Dictionary 有一个 ROOT 宏,其缺省值被设置为工程的名字。
宏即可被用于定义模板文件中指定的占位符的替换值,有时 AppWizard 也用宏来协助步进
对话框的显示,或者确定用哪个模板来创建新的工程文件。例如,如果 Dictionary 中
PROJTYPE_SDI 宏的值为 1,则创建的应用程序是 SDI 类型。但是,如果PROJTYPE_DLG
宏的值为 1 的话,创建的应用程序是基于对话框的。根据宏的值是否为1,MFCAPWZ.DLL
使用不同的模板文件来创建工程文件。
大多数 AppWizard 都由一系列固定的对话框组成。其中后一个对话框的显示完全依赖于前
一个对话框所选择的选项来决定。这种多步进对话框形式称为轨迹。创建MFC 应用程序的
AppWizard 是一个多轨迹的 AppWizard。
——多轨迹 AppWizard
多轨迹 AppWizard 提供了更为复杂的应用程序设置。为了理解多轨迹 AppWizard 概念,请
做一个如下实验:
1、 按下 Ctrl+N 创建新工程
2、 单击“Project”标签,然后选中“MFC AppWizard (exe)”。
3、 注意对话框的标题条内容为“MFC AppWizard - Step 1”,没有指明总共有几步,这是因
为总共的步进数在你决定要创建的 MFC 工程类型前时未知的。
4、 看一下不同类型工程的选项有何差别:single document (SDI),multiple document (MDI),
和 dialog-based。选择 multiple document (MDI)类型,然后单击 Next 按钮。
5、 注意标题条的内容中指定了总共的步进数——“MFC AppWizard - Step 2 of 6”。由于你
选择了 MDI 类型,这个类型总共有六个步进对话框,每一个步进对话框包含特定的基于文
档的 MFC 应用程序选项。
6、 单击 Back 按钮,选择基于对话框的工程类型,然后单击 Next 按钮。这一次标题条的内
容指定的步进总数是——“MFC AppWizard - Step 2 of 4”。这说明创建基于对话框的应用程
序共有四个步进对话框。
以上是对 AppWizards 及其工作原理的讨论。在下一部分我们将尝试创建一个简单的 Custom
AppWizard。
第二部分 创建一个简单的 AppWizard
在第一部分中我们介绍了 Custom AppWizard 的概念及其工作原理。在这一部分,我们将尝
试用 Custom AppWizards 来创建一个最简单的 Custom AppWizard。
首先,我们先创建一个什么事情也不做的 Custom AppWizard,主要是了解它的创建过程和
步骤。按 Ctrl+N 打开 New 对话框,新建一个 Custom AppWizards 工程。填入工程名字后单
击 OK,从步进对话框的标题中,我们可以了解到总共有两个步骤,在第一个步的对话框中
包含三个输入域。
第一个输入域是新 Custom AppWizards 的起点。它有三个单选按钮:
l Existing project——这个选项是以一个现存的工程作为蓝本来创建 Custom
AppWizards。使用这个选项有两个缺点。第一,AppWizards 创建的是一个已经存在的工程。
第二,AppWizards 创建的工程文件名和类名必须与现存工程的文件名和类名一致。
l Standard MFC AppWizard steps——这个选项是最常用的选项,它创建的
AppWizard 模板可用于每一种 MFC 支持的工程类型。从修改各种 MFC 工程模板文件的灵
活性方面,这个选项也是最灵活的。因为这是最通用的一种定制 AppWizard 类型,所以我
们将以它为例。
l Your own customized steps——这个选项全新定制一组步进对话框和选项。例如,
假设你需要一个定制的 AppWizard 来自动创建一个非 MFC 应用程序。这时你就得用这个选
项创建所有自己定制的对话框。
第二个输入域让你命名新建的定制 AppWizard。这个名字将被用于显示在 New Project List
对话框中.
最后一个输入域用来指定定制步进的数目或者对话框的数目,它将被添加到新的定制
AppWizard 中。有时候我们不需要额外的步进对话框,比如我们即将创建的简单AppWizard
就不用任何步进。但在第三部分中,我们将会学习如何定制步进对话框。
接下来,按 Next 按钮继续到定制 AppWizard 的第二步(对话框),也是最后一步。这个对
话框中有两个域都是自解释的。第一个域定义新定制的 AppWizard 是个可执行程序还是一
个 DLL。第二个域指定语言支持选项。
设置工程的缺省选项
剩余24页未读,继续阅读
资源评论
春哥111
- 粉丝: 1w+
- 资源: 5万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功