在Visual C++中定制AppWizard (三)
2010-07-25 20:46:40 来源:WEB开发网——修改模板资源定义文件
由于我们在AppWizard所创建之新工程的“关于”对话框中加入了几个静态控制,那么我们就必须在模板文件中将这些控制的资源ID定义好。以便AppWizard在生成新工程的源文件时也能在目标源文件中定义这些资源ID。这里要涉及两个文件,一个是AppWizard工程Template目录中的Dlgres.h,另一个是同目录中的resource.h。前者用于基于对话框的程序,后者用于SDI和MDI。在Dlgres.h文件的最前面(注释之后)加上如下代码://
找到_APS_NEXT_RESOURCE_VALUE和_APS_NEXT_CONTROL_VALUE,并降下一个值的定义改为:
$$IF(PROJTYPE_DLG)
$$IF(ABOUT)
#define IDC_STATIC_ICON 1000
#define IDC_STATIC_TEXT 1001
#define IDC_STATIC_MAIL 1002
#define IDB_STATIC_IMG 129
$$ENDIF //ABOUT
$$ELIF(PROJTYPE_MDI)
#define IDC_STATIC_ICON 1000
#define IDC_STATIC_TEXT 1001
#define IDC_STATIC_MAIL 1002
#define IDB_STATIC_IMG 129
$$ELIF(PROJTYPE_SDI)
#define IDC_STATIC_ICON 1000
#define IDC_STATIC_TEXT 1001
#define IDC_STATIC_MAIL 1002
#define IDB_STATIC_IMG 129
$$ENDIF //PROJTYPE_DLG
//
#define _APS_NEXT_RESOURCE_VALUE 130
#define _APS_NEXT_CONTROL_VALUE 1003
如法炮制resource.h文件,不同的是IDB_STATIC_IMG的值为:
#define IDB_STATIC_IMG 130
而#define _APS_NEXT_RESOURCE_VALUE定义的下一个值是131。
——修改模板资源文件
因为我们创建的定制AppWizard包含了一个新对话框,所以你必须在资源模板文件中插入一个新的对话框模板资源。你在创建定制AppWizard时,你规定了起始点是“Standard MFC AppWizard steps”。所以在Template目录中,你会看到用这个定制AppWizard创建每种类型的MFC可执行文件所需的全部模板文件。这意味着你可以按自己的要求任意修改这些模板文件。但是我们要确定如何改,以及改什么!这个目录中的模板资源文件(.rc)不止一个,到底应该改哪一个呢?,其实细想一下,很容易确定要改哪一个rc文件。
主要的资源文件名中都包含有三个字母的后缀,它表示语言支持(English=enu,Chinese=chs等等)。此外还有每个资源文件的本地化Macintosh版本。因此,对于一个面向运行Windows的Intel PC的中文版应用程序来说,资源文件的数目无外乎四个:all.rc、dlgall.rc、dlgloc_chs.rc、loc_chs.rc。
打开all.rc和dlgall.rc文件,你会发现其中的指令和宏都是用于支持语言和平台的基本资源文件。进而可以断定这两个文件包含特定语言和平台所需的资源定义,由串表和对话框这样的资源使用。排除了这两个文件,那么我们必须修改的两个对话框资源文件非dlgloc_chs.rc和loc_chs.rc莫属。每种语言之所以有两个资源文件是因为其中一个文件(loc_chs.rc)用于基于文档/视图的应用程序(SDI和MDI),另一个文件(dlgloc_chs.rc)用于基于对话框的程序。
既然知道了要修改哪一个资源文件,那么就把对话框资源添加进去吧,遗憾的是你不能象往常创建对话框模板资源那样用资源编辑器来做这件事情。这是因为在你试图打开模板资源文件的时候,资源编辑器会去编译文件的资源。而现在这些模板文件含有AppWizard指令,文件编译将不会成功,因此Visual Studio会强行让你用文本方式(Edit code)打开它。也可以在“File Open Dialog”对话框中,将“Open As”设为“Text”。 按照上面所讲的方法打开loc_chs.rc文件,用下面的代码替换IDD_ABOUT对话框模板资源定义:$$IF(ABOUT)
接下来用相同的方法打开dlgloc_chs.rc文件,如法炮制。注意对话框定义中宏的使用方法。它说明了用户在Custom AppWizard对话框中输入的信息如何最终反映在资源文件中。现在如果你构造AppWizard工程,则它可以创建基于对话框的应用程序,填写完“程序员”、“Web 站点”等信息,并构造新创建的工程就可以欣赏定制的“关于”对话框了。但是如果对话框中没有系统菜单怎么办呢?从哪里访问“关于”对话框呢?为了解决这个问题,我们还要对资源模板文件(dlgloc_chs.rc)进行修改。在它定义的主对话框中加一个“关于”按钮。这样的话,定制的AppWizard创建每一个基于对话框的程序时都会自动在对话框上加一个“关于”按钮。打开dlgloc_chs.rc文件,将主对话框的资源定义替换为以下代码,注意“帮助”按钮的位置取决于是否创建“关于”按钮。
IDD_ABOUTBOX DIALOG DISCARDABLE 34, 22, 313, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "关于 111"
FONT 9, "宋体"
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC_ICON,11,10,21,21
LTEXT "$$GENERAL_INFO$$",IDC_STATIC,46,14,237,45
CONTROL 129,IDB_STATIC_IMG,"Static",SS_BITMAP |
WS_BORDER,46,72,110,36
LTEXT "@@VCKBASE 版权所有 (C) $$YEAR$$@@",IDC_STATIC,187,83,106,8
LTEXT "VC 知识库
$$WEB_PAGE$$",IDC_STATIC_TEXT,187,97,73,
16
DEFPUSHBUTTON "@@确定@@",IDOK,56,117,84,14,WS_GROUP
LTEXT "@@与我们联系@@",IDC_STATIC_MAIL,187,119,58,8
END
$$ENDIF //ABOUTIDD_$$SAFE_ROOT$$_DIALOG DIALOGEX 0, 0, 320, 200
——修改模版头文件和模板实现文件
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "$$TITLE$$"
FONT @@9@@, "@@宋体@@"
BEGIN
DEFPUSHBUTTON "@@确定@@",IDOK,260,7,50,14
PUSHBUTTON "@@取消@@",IDCANCEL,260,23,50,14
$$IF(ABOUT)
PUSHBUTTON "@@关于(&A)@@",ID_APP_ABOUT,260,45,50,14
$$IF(HELP)
PUSHBUTTON "@@帮助(&H)@@",ID_HELP,260,40,50,14
$$ENDIF
$$ELIF(HELP)
PUSHBUTTON "@@帮助(&H)@@",ID_HELP,260,45,50,14
$$ENDIF
LTEXT "@@TODO: 在这里设置对话控制。@@",IDC_STATIC,50,90,200,8
END
- ››Visual Basic 2008 数学函数
- ››Visual Studio2005中Smart Device的问题
- ››Visual Studio 中根据数据库字段动态生成控件
- ››Visual Studio 11全新黑色主题
- ››Visual Studio 2011 Beta新特性(一):安装VS201...
- ››Visual Studio自定义调试窗体两个小技巧
- ››Visual Studio 2005 Team Edition for Database P...
- ››Visual C#两分钟搭建BHO IE钩子
- ››Visual C++优化对大型数据集合的并发访问
- ››定制个性化的对话框窗口类
- ››VISUAL C++中的OCX控件的使用方法
- ››Visual C++实现视频图像处理技术
更多精彩
赞助商链接