前段时间刚看完了侯俊杰先生的大家之作《深入浅出MFC》。当时刚读完C++ PRIMER 和 effective C++ ,前者是语言规范,后者偏重语言和设计方面所以读起Application Frame的时候正是非常顺畅下来不断有前面两本书的体会掺杂进来,欣喜不断。之前会简单的MFC使用,读了《深入浅出MFC》之后,犹如醍醐灌顶,正是漫卷诗书喜欲狂啊!哈哈!
此书后半部分有一章是定制自己的用户向导custom wizard。当时大呼过瘾(毕竟是一招比较炫的技巧),可是那只适用于vc6.0,而现在使用了VS2008 VC9.0,IDE架构上有巨大变化,我找了下资料,终于找出了在此开发环境下作出自定义的custome wizard的方法。现总结如下:
我的目的是试验,产生自己的MFC向导,并且在每个向导产生的文件头部加上文件信息和日期信息以及工作信息
WinApp2.cpp头部信息如下
/******************************************************************************
*
* HXF MFC GROUP
*
* Name : WinApp2.cpp
* Date : 26 Jan 2010
*-----------------------------------------------------------------------------
*
* HXF出品,必属精品,嘿嘿!
*
******************************************************************************/
以下是步骤:
1、首先菜单项new 一个project的时候,wizard向导加载器会去以下这个目录寻找资料进行相应的wizard加载。
XXX.vsz, XXX文件夹下的XXX.vsdir,XXX.ico这三个文件比较重要(XXX表示向导的名字,我这里用的是HXF_MFCWizard) 。
1)其中HXF_MFCWizard.vsz里面的内容:
VSWIZARD 7.0
Wizard=VsWizard.VsWizardEngine.9.0
Param="WIZARD_NAME = Application"
Param="RELATIVE_PATH = VCWizards/CustomWiz/Generic/MFC"
Param="WIZARD_ID = 104"
注:releatice_path + wizard_name 这个连接起来的地址就是实际自定义这个wizard向导对话框的资源存储区域,
即:VCWizards/CustomWiz/Generic/MFC/Application, 这边你可以自行设定,这个目录我是自己添加的,然后把原本microsoft的MFCwizard资源目录 (D:/Program Files/Microsoft Visual Studio 9.0/VC/VCWizards/AppWiz/MFC) 拷贝到自行设定的目录下。
2)HXF_MFCWizard.ico是向导图标
3)HXF_MFCWizard.vsdir内容(#为注释):
# Fields are as follows: see http://msdn.microsoft.com/en-gb/library/aa730846(VS.80).aspx
# RelPathName - relative path from here to the vsz file
# {clsidPackage} - always zero for user defined wizards
# LocalizedName - name that appears in the Add Item dialog box
# SortPriority - sort order and relative priority of the Wizard, with 1 being highest
# Description - A localizable description as it will appear in the Add Item dialog when the item is selected
# DLLPath - always zero for user defined wizards
# IconResourceId - always zero for user defined wizards
# Flags - generally zero
# BaseName - suggested base name for the generated item, displayed in the Name field in the dialog
#
../HXF_MFCWizard.vsz|0|HXF_MFC Win32 Application|1|Create a Windows application by MFC|0|0|0|WinApp
此 .vsdir 文件指出向导的一些名称而已。
将此XXX.vsz和XXX文件夹放到vcprojects下,XXX.vsdir放到XXX文件夹下即可
做完这一步,其实你在IDE中new 一个project在VC选项下即可以发现 HXF_MFCWizard向导。点应用,进入的WIZARD其实全是原来的MFCwizard的资源和向导程序。看到这里我相信聪明的读者已经知道该怎么办了,呵呵!
对!就是去修改我刚刚拷贝的那个资源VCWizards/CustomWiz/Generic/MFC/Application下的文件。 因为最终的向导程序是指向到这里来进行配置文件的。
2、修改 VCWizards/CustomWiz/Generic/MFC/Application 的几个文件:
在2052下(2052表示语言) 修改default.js
即将这段添上即可。
// CustomWiz : add DATE wizard variable for use in code templates
month = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
var d = new Date();
strParam = d.getDate().toString();
if (1 == strParam.length)
strParam = " " + d.getDate().toString();
strParam += " " + month[d.getMonth()];
strParam += " " + d.getFullYear().toString();
wizard.AddSymbol("DATE", strParam);
// CustomWiz : end of additional variables
我相信大家已经猜到了,向导就是根据这个Symbol来管理一些特殊自定义或者系统默认变量的。(很像macro)
接下来就把每个template文件夹下的所有.cpp和.c文件加上头即可
/******************************************************************************
*
* HXF MFC GROUP
*
* Name : [!output PROJECT_NAME].cpp
* Date : [!output DATE]
*-----------------------------------------------------------------------------
*
* HXF出品,必属精品,嘿嘿!
*
******************************************************************************/
[!output DATE] 会用上面的Symbol替换,wizard配置好以后,按下确定以后,wizard会为我们根据这些已经存在的template文件以及那些Symbol或者控制或者替换,产生一些列模板代码,就是这样一个,一个自定义的向导完成,你通过这个向导产生的文件都会自动生成你的一些工作组信息,日期等你需要的信息,很过瘾吧! 速度自己做一个吧!
你可以通过这篇文章获得更详细的信息和做法:
http://www.codeproject.com/KB/codegen/CustomWizard.aspx?msg=3344592#xx3344592xx