1、向导说明。”这个需要在vsdir文件修改。打开DialogBased Application.vsdir文件,只有简单的一行:DialogBased Application.vsz| |DialogBased Application|1|TODO: 向导说明。| |6777| |DialogBased Application大家一定看到了“TODO:”这句话吧,我先来修改这句话,改成“DialogBased Application. By <Rover12421>”。保存,然后新建项目选择我们刚才创建的向导,是不是已经改过来了?如果以前创建过,可能这里并不能看出来。关于vsdir文
2、件,大家也可以参考MSDN,下面贴下MSDN上的一些说明,大家看看就行了。可为 VSDir 文件中的每个记录指定下列字段:字段含义RelPathName必需。向导的 .vsz 文件的名称(如 MyWizard.vsz),此文件与 Visual Studio 安装目录有关。clsidPackage可选。表示产品的 GUID,该产品(如 Visual C+)带有的 DLL 中包含本地化资源。通常,对于符合第三方向导的 VSDir 文件,此字段为空。LocalizedName这是向导或模板的可本地化的名称以及出现在“添加项”对话框中的名称。它可以是字符串或 #ResID 形式的资源标识符。SortP
3、riority表示向导的排序顺序和相对优先级的整数,1 为最高。例如,如果此项为“1”,那么它出现在其他 1 之后和所有 2 或更低级别之前。说明当选定项后,将在“添加项”对话框中显示的模板或向导的可本地化说明。仅应用于模板文件,不应用于文件夹。DLLPath 或 clsidPackage指定到 DLL 或 EXE 文件的完整路径,或产品的 GUID,该产品所带的 .dll 文件包含要为向导加载的图标。该图标使用给定的 IconResourceId 作为 DLL/EXE 文件外部的资源加载。此设置重写图标位置的 clsidPackage(如果已指定)。IconResourceIdDLL 文件内
4、确定要显示的图标的资源标识符。如果未定义图标,环境用默认图标替代与该项具有相同扩展名的文件。Flags请参见下面的 Flags 说明和表。SuggestedBaseName在对话框的“名称”字段中显示的向导的默认名称。它是字符串或 #ResID 形式的资源标识符。如果该名称不是唯一的,那么环境将为该名称追加一个整数。例如,MyFile.aspx 可能更改为 MyFile1.aspx。如果未提供名称,那么使用“Project”。说明 任何没有有含义的数据的非必选字段应包含零 (0) 作为占位符。 如果未提供本地化名称,则使用相对路径。如果未定义图标,则 IDE 用该扩展名替换文件的默认图标。如果
5、未提供建议的基名称,则使用“Project”。Flags 一组用于启用或禁用“添加项”对话框中的“名称”和“位置”字段的位标志。也就是说,当用户从“添加”菜单中选择“添加新项”时,项目将决定名称和位置是否显示在“模板”窗格上,而标志将决定名称和位置是否可由用户使用。将 Flags 的值设置为各个值的和。即 33 等于 VSDIRFLAG_NonLocalTemplate | VSDIRITEM_DisableLocationField。 标志名称十进制值DescriptionVSDIRFLAG_NonLocalTemplate1使用非本地用户界面行为和保存机制。VSDIRFLAG_BlankS
6、olution2创建空白(空)解决方案。不创建项目。VSDIRFLAG_DisableBrowseButton4对此项目或项禁用“浏览”按钮。VSDIRFLAG_DontAddDefExtension8不将默认扩展名追加到为项提供的名称中。(此设置对项目无效。)VSDIRFLAG_DisableLocationField32禁用此项目或项的位置字段。VSDIRFLAG_DontInitNameField4096不用有效的名称初始化此项目或项的名称字段。VSDIRFLAG_DisableNameField8192禁用此项目或项的名称字段。接着说下Default.js ,具体也参考MSDN默认情况
7、下,项目的 Default.js 文件包含以下函数:AddConfig 添加项目的配置。可以提供编译器和链接器设置。AddFilesToCustomProj 当用户单击“完成”时,将指定的文件添加到项目中。AddFilters 当用户单击“完成”时,将指定的源筛选器添加到项目中。CreateCustomProject 当用户单击“完成”时,在指定位置创建项目。CreateCustomInfFile 创建项目的 Templates.inf 文件。DelFile 删除指定的文件。GetTargetName 获取指定文件的名称。OnFinish 当用户单击“完成”时,由向导调用以创建项目、添加文件和
8、筛选器、呈现模板以及设置配置。PchSettings 设置预编译头设置。有关更多信息,请参见 Common.js 参考中的 SetCommonPchSettings。下节我们只需要修改AddFilters函数,来把文件分别添加到源文件,头文件和资源文件里。还需要修改GetTargetName函数,用来修改项目的文件名,使每次创建的项目的文件名都不一样。差不多了解这些就行。第三步,制作对话框向导这步就是让大家制作功能完善的自定义向导。首先我们把第一节中制作的Win32DLG对话框项目的文件拷贝到自定义向导中。下载 (41.33 KB)2010-2-8 13:15打开Win32DLG项目目录,选择
9、所有的头文件,源文件和资源文件,拷贝到向导项目下的Templates2052下面.下载 (48.14 KB)然后在“模板文件”上点“右键-添加现有项”,把刚刚拷贝到Templates2052下的几个文件全部添加进来。下载 (34.54 KB)再打开Templates.inf文件,把添加的文件的文件名全部写到里面。为什么要写着里呢?这是我们使用向导新建项目所需要的文件,default.js通过调用AddFilesToCustomProj函数,把写在Templates.inf中的文件拷贝到新建的项目文件夹里。下载 (57.36 KB)现在我们来修改default.js文件。找到GetTargetN
10、ame函数,修改它。修改后的代码:1. 2. function GetTargetName(strName, strProjectName) 3. 4. try 5. 6. / TODO: 基于模板文件名设置呈现文件的名称 7. var strTarget = strName;8. if (strName = readme.txt) 9. strTarget = ReadMe.txt;10. if (strName = sample.txt11. strTarget = Sample.txt12. if (strName = Win32DLG.cpp13. strTarget = strPro
11、jectName + .cpp14. if (strName = Win32DLG.h15. strTarget = strProjectName + .h16. if (strName = Win32DLG.ico17. strTarget = strProjectName + .ico18. if (strName = Win32DLG.rc19. strTarget = strProjectName + .rc20. return strTarget;21. 22. catch(e) 23. 24. throw e;25. 26. function GetTargetName(strNa
12、me, strProjectName) try / TODO: 基于模板文件名设置呈现文件的名称 var strTarget = strName; if (strName = ) strTarget = strTarget = strProjectName + return strTarget; catch(e) throw e;我们添加了4个if语句,用来把原来的文件名改成 “新建的项目名”+扩展名。这个规则可以自定义,但是一定要和后面的更改一致。说下这个函数的两个参数,strName就是传进来的文件名,strProjectName就是传进来的项目名。接着往上找到AddFilters函数,修
13、改如下:2. function AddFilters(proj) 6. / 将文件夹添加到项目 7. /var strSrcFilter = wizard.FindSymbol(SOURCE_FILTER);8. /var group = proj.Object.AddFilter(源文件9. /group.Filter = strSrcFilter;10. proj.Object.AddFilter().Filter = cpp;c11. proj.Object.AddFilter(头文件hpp;h12. proj.Object.AddFilter(资源文件ico;rc;bin13. 14.
14、 catch(e) 15. 16. throw e;17. 18. function AddFilters(proj) / 将文件夹添加到项目 /var strSrcFilter = wizard.FindSymbol( /var group = proj.Object.AddFilter( /group.Filter = strSrcFilter; proj.Object.AddFilter(AddFilter(),是我们要添加到项目中显示的那个目录里面,比如源文件、Source File,可以自定义,但最好写成相对应的中文或英文,Filter后面的就是判断的扩展名。差不多这样就修改完成了。
15、可以先新建一个项目看看,看起来会没什么问题,但是编译会出错,这很正常,因为我们还有几个地方需要做小小的修改。我们需要把所有老的项目名命名的地方全部改成新建的项目名,用到就是!output PROJECT_NAME。一共有两个文件,一个是Win32DLG.cpp,一个是Win32DLG.rc打开Win32DLG.cpp,找到#include Win32DLG.h,修改成#include !output PROJECT_NAME.hWin32DLG.rc是资源文件,不能直接双击编辑,要在上面点“右键,查看代码”。下载 (22.22 KB)15找到IDI_WIN32DLG ICON Win32DLG
16、.ico修改成output PROJECT_NAME.ico还有一处IDS_APP_TITLE Win32DLGIDC_WIN32DLG WIN32DLG对应的修改成output PROJECT_NAME这样保存之后这个向导就算完成了。大家可以自己用这个向导生成试试。下一节讲讲怎么把这个向导给别人使用。1.制作一个DialogBased Application(对话框应用程序)程序。下载 (60.32 KB)2010-2-8 09:26新建一个Win32项目,配置使用默认的就行。我新建的项目是Win32DLG。先看下这个项目有哪些文件下载 (18.1 KB)一共是10个文件。首先我们需要修改的
17、是资源文件-Win32DLG.rc。这里的修改很简单。新建一个Dialog对话框资源或直接修改现有的ABOUT对话框资源也行。我用的新建。在Dialog上点右键,插入Dialog.下载 (49.11 KB)默认的界面如下。我们只保留一个确定按钮。调整界面大小,标题,风格等等,这些很容易就不说了。相信大家都会。下载 (13.05 KB)我修改的如下,并修改确认按钮的ID为 IDC_OK。主界面的ID为IDD_Main.下载 (10.63 KB)接着删除无用的资源IDD_ABOUTBOX和IDC_WIN32DLG下载 (18.41 KB)下载 (13.35 KB)界面就修改好了。接着就是重点,修改
18、Win32DLG.cpp文件。除了包含的头文件和WinMain函数,其他全部删除。WinMain函数里也只保留前两句,和return。并把“return (int) msg.wParam;”修改成“return 0;”下载 (46.25 KB)然后在WinMain函数里添加一条DialogBox,来显示我们的主界面DialogBox(hInstance, MAKEINTRESOURCE(IDD_Main), NULL, WinProc);再在后面添加主界面的处理函数WinProc,以及主界面的载入和关闭事件函数Main_OnInitDialog,Main_OnClose,和OnCommand事
19、件函数Main_OnCommand。完成的Win32DLG.cpp代码如下2. / Win32DLG.cpp : 定义应用程序的入口点。3. / 4. #include stdafx.h5. #include 6. int APIENTRY _tWinMain(HINSTANCE hInstance, 7. HINSTANCE hPrevInstance, 8. LPTSTR lpCmdLine, 9. int nCmdShow) 10. 11. UNREFERENCED_PARAMETER(hPrevInstance);12. UNREFERENCED_PARAMETER(lpCmdLine
20、);13. DialogBox(hInstance, MAKEINTRESOURCE(IDD_Main), NULL, WinProc);14. return 0;15. 16. BOOL WINAPI WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 17. 18. switch(uMsg) 19. 20. HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);21. HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);22. HANDL
21、E_MSG(hWnd,WM_CLOSE, Main_OnClose);23. 24. return FALSE;26. BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) 27. 28. return TRUE;29. 30. void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) 31. 32. switch(id) 33. 34. case IDC_OK:35. 36. MessageBox( hwnd, _T(HelloWorl
22、d), _T(OK), MB_OK );37. 38. break;39. default:40. break;41. 42. 43. void Main_OnClose(HWND hwnd) 44. 45. EndDialog(hwnd, 0);46. / Win32DLG.cpp :/int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PA
23、RAMETER(lpCmdLine); DialogBox(hInstance, MAKEINTRESOURCE(IDD_Main), NULL, WinProc); return 0;BOOL WINAPI WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) switch(uMsg) HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE
24、, Main_OnClose); return FALSE;BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) return TRUE;void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) switch(id) case IDC_OK: MessageBox( hwnd, _T( break; default:void Main_OnClose(HWND hwnd) EndDialog(hwnd, 0);主要的函数都写好了,按钮的事件也添加到Main_OnCommand里了。现在就是要处理头文件。打开Win32DLG.h头文件,添加函数声明。先看看我们在Win3
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2