




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用VS2008 制作对话框向导(完)本内容整理自rover12421用VS2008 制作对话框向导(完)/forum/thread-9243-1-1-uid54410.html本人喜欢用VS,所以先说明,在这只教大家怎么用VS2008制作杨老师的那个对话框向导。或许你还能做的比那个更好。至于VC6的那个请自己查阅资料。制作步骤:1.制作一个对话框工程2.创建一个空向导3.制作对话框向导4.怎么让别人使用你制作的向导制作前,先说下VS路径。我是用的是默认路径:C:Program FilesMicrosoft Visual Studio 9.0VC 。如果不是这个路径的,请修改成对用的目录就行。后面不再提示。帖子因为中间有人回帖,和评分问题,所以操作步骤并不是一个一个的接着了,但也不是很乱。希望对大家有帮助。第二步,创建空向导。文件-新建-Visual C+-自定义向导下载 (81.96 KB)2010-2-8 11:03我命名为 DialogBased Application 。在弹出对话框点下一步。下载 (31.25 KB)2010-2-8 11:03这里,因为我们不需要交互操作,也不需要弹出什么提示,选择界面什么的,就不选择 “用户界面”。然后完成。下载 (24.35 KB)2010-2-8 11:03只有简单的几个文件。制作向导最关键的是default.js文件和Templates.inf文件。创建好以后,在“新建-项目-向导”里就能看到这个向导了下载 (61.27 KB)2010-2-8 11:03现在这个向导什么事也不能。下一步再教大家制作一个功能完善的向导。这节很简单,就说一些相关知识,以减少下节的负担。首先看下怎么向导向导说明。就是上图中位于名称上方的“TODO:向导说明。”这个需要在vsdir文件修改。打开DialogBased Application.vsdir文件,只有简单的一行:DialogBased Application.vsz| |DialogBased Application|1|TODO: 向导说明。| |6777| |DialogBased Application大家一定看到了“TODO: 向导说明。”这句话吧,我先来修改这句话,改成“DialogBased Application. By ”。保存,然后新建项目选择我们刚才创建的向导,是不是已经改过来了?如果以前创建过,可能这里并不能看出来。关于vsdir文件,大家也可以参考MSDN,下面贴下MSDN上的一些说明,大家看看就行了。可为 VSDir 文件中的每个记录指定下列字段:字段含义RelPathName必需。向导的 .vsz 文件的名称(如 MyWizard.vsz),此文件与 Visual Studio 安装目录有关。clsidPackage可选。表示产品的 GUID,该产品(如 Visual C+)带有的 DLL 中包含本地化资源。通常,对于符合第三方向导的 VSDir 文件,此字段为空。LocalizedName可选。这是向导或模板的可本地化的名称以及出现在“添加项”对话框中的名称。它可以是字符串或 #ResID 形式的资源标识符。SortPriority必需。表示向导的排序顺序和相对优先级的整数,1 为最高。例如,如果此项为“1”,那么它出现在其他 1 之后和所有 2 或更低级别之前。说明必需。当选定项后,将在“添加项”对话框中显示的模板或向导的可本地化说明。它可以是字符串或 #ResID 形式的资源标识符。仅应用于模板文件,不应用于文件夹。DLLPath 或 clsidPackage必需。指定到 DLL 或 EXE 文件的完整路径,或产品的 GUID,该产品所带的 .dll 文件包含要为向导加载的图标。该图标使用给定的 IconResourceId 作为 DLL/EXE 文件外部的资源加载。此设置重写图标位置的 clsidPackage(如果已指定)。仅应用于模板文件,不应用于文件夹。IconResourceId可选。DLL 文件内确定要显示的图标的资源标识符。如果未定义图标,环境用默认图标替代与该项具有相同扩展名的文件。仅应用于模板文件,不应用于文件夹。Flags可选。请参见下面的 Flags 说明和表。仅应用于模板文件,不应用于文件夹。SuggestedBaseName必需。在对话框的“名称”字段中显示的向导的默认名称。它是字符串或 #ResID 形式的资源标识符。如果该名称不是唯一的,那么环境将为该名称追加一个整数。例如,MyFile.aspx 可能更改为 MyFile1.aspx。如果未提供名称,那么使用“Project”。仅应用于模板文件,不应用于文件夹。说明 任何没有有含义的数据的非必选字段应包含零 (0) 作为占位符。 如果未提供本地化名称,则使用相对路径。 如果未定义图标,则 IDE 用该扩展名替换文件的默认图标。 如果未提供建议的基名称,则使用“Project”。 Flags 一组用于启用或禁用“添加项”对话框中的“名称”和“位置”字段的位标志。也就是说,当用户从“添加”菜单中选择“添加新项”时,项目将决定名称和位置是否显示在“模板”窗格上,而标志将决定名称和位置是否可由用户使用。 将 Flags 的值设置为各个值的和。即 33 等于 VSDIRFLAG_NonLocalTemplate | VSDIRITEM_DisableLocationField。 标志名称十进制值DescriptionVSDIRFLAG_NonLocalTemplate1使用非本地用户界面行为和保存机制。VSDIRFLAG_BlankSolution2创建空白(空)解决方案。不创建项目。VSDIRFLAG_DisableBrowseButton4对此项目或项禁用“浏览”按钮。VSDIRFLAG_DontAddDefExtension8不将默认扩展名追加到为项提供的名称中。(此设置对项目无效。)VSDIRFLAG_DisableLocationField32禁用此项目或项的位置字段。VSDIRFLAG_DontInitNameField4096不用有效的名称初始化此项目或项的名称字段。VSDIRFLAG_DisableNameField8192禁用此项目或项的名称字段。接着说下Default.js ,具体也参考MSDN默认情况下,项目的 Default.js 文件包含以下函数: AddConfig 添加项目的配置。可以提供编译器和链接器设置。 AddFilesToCustomProj 当用户单击“完成”时,将指定的文件添加到项目中。 AddFilters 当用户单击“完成”时,将指定的源筛选器添加到项目中。 CreateCustomProject 当用户单击“完成”时,在指定位置创建项目。 CreateCustomInfFile 创建项目的 Templates.inf 文件。 DelFile 删除指定的文件。 GetTargetName 获取指定文件的名称。 OnFinish 当用户单击“完成”时,由向导调用以创建项目、添加文件和筛选器、呈现模板以及设置配置。 PchSettings 设置预编译头设置。有关更多信息,请参见 Common.js 参考中的 SetCommonPchSettings。下节我们只需要修改AddFilters函数,来把文件分别添加到源文件,头文件和资源文件里。还需要修改GetTargetName函数,用来修改项目的文件名,使每次创建的项目的文件名都不一样。差不多了解这些就行。第三步,制作对话框向导这步就是让大家制作功能完善的自定义向导。 首先我们把第一节中制作的Win32DLG对话框项目的文件拷贝到自定义向导中。下载 (41.33 KB)2010-2-8 13:15打开Win32DLG项目目录,选择所有的头文件,源文件和资源文件,拷贝到向导项目下的Templates2052下面.下载 (48.14 KB)2010-2-8 13:15然后在“模板文件”上点“右键-添加现有项”,把刚刚拷贝到Templates2052下的几个文件全部添加进来。下载 (34.54 KB)2010-2-8 13:15再打开Templates.inf文件,把添加的文件的文件名全部写到里面。为什么要写着里呢?这是我们使用向导新建项目所需要的文件,default.js通过调用AddFilesToCustomProj函数,把写在Templates.inf中的文件拷贝到新建的项目文件夹里。下载 (57.36 KB)2010-2-8 13:15现在我们来修改default.js文件。找到GetTargetName函数,修改它。修改后的代码:1. 2. functionGetTargetName(strName,strProjectName) 3. 4. try5. 6. /TODO:基于模板文件名设置呈现文件的名称 7. varstrTarget=strName; 8. if(strName=readme.txt) 9. strTarget=ReadMe.txt; 10. if(strName=sample.txt) 11. strTarget=Sample.txt; 12. if(strName=Win32DLG.cpp) 13. strTarget=strProjectName+.cpp; 14. if(strName=Win32DLG.h) 15. strTarget=strProjectName+.h; 16. if(strName=Win32DLG.ico) 17. strTarget=strProjectName+.ico; 18. if(strName=Win32DLG.rc) 19. strTarget=strProjectName+.rc; 20. returnstrTarget; 21. 22. catch(e) 23. 24. throwe; 25. 26. function GetTargetName(strName, strProjectName) try / TODO: 基于模板文件名设置呈现文件的名称var strTarget = strName;if (strName = readme.txt) strTarget = ReadMe.txt;if (strName = sample.txt) strTarget = Sample.txt;if (strName = Win32DLG.cpp) strTarget = strProjectName + .cpp;if (strName = Win32DLG.h) strTarget = strProjectName + .h;if (strName = Win32DLG.ico) strTarget = strProjectName + .ico;if (strName = Win32DLG.rc) strTarget = strProjectName + .rc;return strTarget; catch(e) throw e; 我们添加了4个if语句,用来把原来的文件名改成 “新建的项目名”+扩展名。这个规则可以自定义,但是一定要和后面的更改一致。说下这个函数的两个参数,strName就是传进来的文件名,strProjectName就是传进来的项目名。接着往上找到AddFilters函数,修改如下:1. 2. functionAddFilters(proj) 3. 4. try5. 6. /将文件夹添加到项目 7. /varstrSrcFilter=wizard.FindSymbol(SOURCE_FILTER); 8. /vargroup=proj.Object.AddFilter(源文件); 9. /group.Filter=strSrcFilter; 10. proj.Object.AddFilter(源文件).Filter=cpp;c; 11. proj.Object.AddFilter(头文件).Filter=hpp;h; 12. proj.Object.AddFilter(资源文件).Filter=ico;rc;bin; 13. 14. catch(e) 15. 16. throwe; 17. 18. function AddFilters(proj) try / 将文件夹添加到项目/var strSrcFilter = wizard.FindSymbol(SOURCE_FILTER);/var group = proj.Object.AddFilter(源文件);/group.Filter = strSrcFilter;proj.Object.AddFilter(源文件).Filter = cpp;c;proj.Object.AddFilter(头文件).Filter = hpp;h;proj.Object.AddFilter(资源文件).Filter = ico;rc;bin; catch(e) throw e; AddFilter(),是我们要添加到项目中显示的那个目录里面,比如源文件、Source File,可以自定义,但最好写成相对应的中文或英文,Filter后面的就是判断的扩展名。差不多这样就修改完成了。可以先新建一个项目看看,看起来会没什么问题,但是编译会出错,这很正常,因为我们还有几个地方需要做小小的修改。我们需要把所有老的项目名命名的地方全部改成新建的项目名,用到就是!output PROJECT_NAME。一共有两个文件,一个是Win32DLG.cpp,一个是Win32DLG.rc打开Win32DLG.cpp,找到#include Win32DLG.h,修改成#include !output PROJECT_NAME.hWin32DLG.rc是资源文件,不能直接双击编辑,要在上面点“右键,查看代码”。下载 (22.22 KB)2010-2-8 13:15找到IDI_WIN32DLG ICON Win32DLG.ico修改成IDI_WIN32DLG ICON !output PROJECT_NAME.ico还有一处IDS_APP_TITLE Win32DLGIDC_WIN32DLG WIN32DLG对应的修改成IDS_APP_TITLE !output PROJECT_NAMEIDC_WIN32DLG !output PROJECT_NAME这样保存之后这个向导就算完成了。大家可以自己用这个向导生成试试。下一节讲讲怎么把这个向导给别人使用。1.制作一个DialogBased Application(对话框应用程序)程序。下载 (60.32 KB)2010-2-8 09:26新建一个Win32项目,配置使用默认的就行。我新建的项目是Win32DLG。先看下这个项目有哪些文件下载 (18.1 KB)2010-2-8 09:26一共是10个文件。首先我们需要修改的是资源文件-Win32DLG.rc。这里的修改很简单。新建一个Dialog对话框资源或直接修改现有的ABOUT对话框资源也行。我用的新建。在Dialog上点右键,插入Dialog.下载 (49.11 KB)2010-2-8 09:26默认的界面如下。我们只保留一个确定按钮。调整界面大小,标题,风格等等,这些很容易就不说了。相信大家都会。下载 (13.05 KB)2010-2-8 09:26我修改的如下,并修改确认按钮的ID为 IDC_OK。主界面的ID为IDD_Main.下载 (10.63 KB)2010-2-8 09:26接着删除无用的资源IDD_ABOUTBOX和IDC_WIN32DLG下载 (18.41 KB)2010-2-8 09:26下载 (13.35 KB)2010-2-8 09:26界面就修改好了。接着就是重点,修改Win32DLG.cpp文件。除了包含的头文件和WinMain函数,其他全部删除。WinMain函数里也只保留前两句,和return。并把“return (int) msg.wParam;”修改成“return 0;”下载 (46.25 KB)2010-2-8 09:26然后在WinMain函数里添加一条DialogBox,来显示我们的主界面DialogBox(hInstance, MAKEINTRESOURCE(IDD_Main), NULL, WinProc);再在后面添加主界面的处理函数WinProc,以及主界面的载入和关闭事件函数Main_OnInitDialog,Main_OnClose,和OnCommand事件函数Main_OnCommand。完成的Win32DLG.cpp代码如下1. 2. /Win32DLG.cpp:定义应用程序的入口点。 3. / 4. #includestdafx.h 5. #includeWin32DLG.h 6. intAPIENTRY_tWinMain(HINSTANCEhInstance, 7. HINSTANCEhPrevInstance, 8. LPTSTRlpCmdLine, 9. intnCmdShow) 10. 11. UNREFERENCED_PARAMETER(hPrevInstance); 12. UNREFERENCED_PARAMETER(lpCmdLine); 13. DialogBox(hInstance,MAKEINTRESOURCE(IDD_Main),NULL,WinProc); 14. return0; 15. 16. BOOLWINAPIWinProc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam) 17. 18. switch(uMsg) 19. 20. HANDLE_MSG(hWnd,WM_INITDIALOG,Main_OnInitDialog); 21. HANDLE_MSG(hWnd,WM_COMMAND,Main_OnCommand); 22. HANDLE_MSG(hWnd,WM_CLOSE,Main_OnClose); 23. 24. returnFALSE; 25. 26. BOOLMain_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam) 27. 28. returnTRUE; 29. 30. voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify) 31. 32. switch(id) 33. 34. caseIDC_OK: 35. 36. MessageBox(hwnd,_T(HelloWorld),_T(OK),MB_OK); 37. 38. break; 39. default: 40. break; 41. 42. 43. voidMain_OnClose(HWNDhwnd) 44. 45. EndDialog(hwnd,0); 46. / Win32DLG.cpp : 定义应用程序的入口点。/#include stdafx.h#include Win32DLG.hint APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(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, 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(HelloWorld), _T(OK), MB_OK );break; default:break; void Main_OnClose(HWND hwnd) EndDialog(hwnd, 0);主要的函数都写好了,按钮的事件也添加到Main_OnCommand里了。现在就是要处理头文件。打开Win32DLG.h头文件,添加函数声明。先看看我们在Win32DLG.cpp文件里用到了那些函数(WinMain函数是入口函数,不用管)。WinProc,Main_OnInitDialog,Main_OnCommand,Main_OnCommand一共用了四个函数。那就把这四个函数的声明添加到Win32DLG.h头文件里。修改完成的头文件Win32DLG.h如下:1. 2. #pragmaoncea 3. #includeresource.h 4. BOOLWINAPIWinProc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam); 5. BOOLMain_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam); 6. voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify); 7. voidMain_OnClose(HWNDhwnd); #pragma oncea#include resource.hBOOL WINAPI WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam);void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);void Main_OnClose(HWND hwnd);做完这些,这个程序基本完成了,但是你编译会发现,竟然还有错误。这是因为我们还缺少一共头文件,没包含进来。这个头文件是-windowsx.h。你可以写到Win32DLG.cpp,也可以写到Win32DLG.h。不过,我建议是把他和windows.h放在一起-添加到stdafx.h里。打开stdafx.h,你会看到一句#include 。我们就在下面添加#include 。这里就不贴代码了。最后编译完成。没问题了。我们就继续第二步。第四步,怎么让别人使用你的向导首先来手动操作一次,等下再教大家写bat,有能力的也可以自己写安装程序,或用WinRAR的自解压功能都行。为了方便操作,可以先把向导项目拷贝到桌面。删除其中一个.user结尾的用户文件,如果你没有编译过可能没有这个文件。我的这个文件完整名称是:DialogBased Application.vcproj.ROVER124.Rover12421.user。他的命名规则是:项目名.vcproj.编译项目使用的主机名.编译项目使用的用户名.user。这个文件没用,直接删除它。 下载 (29.52 KB)2010-2-8 15:58首先我们需要把.ico、.vsdir、.vsz 这三个扩展的文件拷贝到安装目录下的VCvcprojects下。我这里的全路径是:C:Program FilesMicrosoft Visual Studio 9.0VCvcprojects 然后在安装目录下的VCVCWizards中新建一个文件夹,随便怎么命名都可以,比如我这里命名为Rover12421,再把拷贝到桌面项目文件夹下的所有文件都拷贝进去。我这里拷贝的是: C:Program FilesMicrosoft Visual Studio 9.0VCVCWizardsRover12421 就这样简单的两三步就完成了。创建一个新项目试试下载 (86.95 KB)2010-2-8 15:58看到没。不过目前有个小小的缺点就是这个向导只能在“Visual C+”大的栏里看的到,比如我想点Win32的时候,这个项目也在里面,这不是更完美吗? 其实这个很简单,只需在某一个文件中加一句话就能实现。现在我们就来把他加到Win32项目栏里。 还是安装目录下的VCvcprojects,这里有几个文件夹,我们打开Win32文件夹,现在的路径是:VCvcprojectsWin32,这个文件夹里只有一个文件 win32.vsdir,还记得vsdir文件吗?用记事本打开这个文件, .Win32Wiz.vsz|1B027A40-8F43-11D0-8D11-00A0C91BC942|#1171|1|#1172|1B027A40-8F43-11D0-8D11-00A0C91BC942|0|4096|#1154 .Win32Console.vsz|1B027A40-8F43-11D0-8D11-00A0C91BC942|#1204|1|#1205|1B027A40-8F43-11D0-8D11-00A0C91BC942|0|4096|#1154 我们在最后加上我们自己vsdir文件里的内容 DialogBased Application.vsz| |DialogBased Application|1|DialogBased Application. By | |6777| |DialogBased Application 先不高兴,如果就这样完成的话,并没有达到效果,我们需要在最前面加上.,也就是在DialogBased Application.vsz前加上.,变成 .DialogBased Application.vsz| |DialogBased Application|1|DialogBased Application. By | |6777| |DialogBased Application 保存后,我们再新建项目看看 下载 (64.08 KB)2010-2-8 15:58是不是有了。如果没有那就是你的内容写错了。 我前面改vsdir文件的时候,就不小心几个段给覆盖掉了,结果项目说明那就没的显示,所以在改vsdir要仔细一点点。 原来安装就是这么简单。那用BAT是不是很容易实现呢? 看下我写的BAT,是不是很简单?1.2. copy *.ico %VS90COMNTOOLS%.VCvcprojects /y3. copy *.vsdir %VS90COMNTOOLS%.VCvcprojects /y4. copy *.vsz %VS90COMNTOOLS%.VCvcprojects /y5. xcopy *.* %VS90COMNTOOLS%.VCVCWizardsRover12421 /y /s复制代码如果想添加到Win32的话就添加下面这些1. echo.%VS90COMNTOOLS%.VCvcprojectsWin32win32.vsdir2. type *.vsdirtemp.txt3. for /f delims= %i in (temp.txt) do echo .%i%VS90COMNTOOLS%.VCvcprojectsWin32win32.vsdir4. del temp.txt复制代码可能有些人看不懂,我说下。 %VS90COMNTOOLS%是一个环境变量,在CMD里用set命令可以看到(VS90COMNTOOLS=C:Program FilesMicrosoft Visual Studio 9.0Common7Tools)。因为没有直接指向VS安装目录的环境变量,这个变量是指向“C:Program FilesMicrosoft Visual Studio 9.0Common7Tools”,所以使用两个.向后退到“C:Program FilesMicrosoft Visual Studio 9.0”目录。第一段bat为什么最后一个不用copy而用xcopy呢?是因为copy没有拷贝子目录的功能,需要拷贝子目录就的使用xcopy单配“/s”参数使用。第二段中的 echo. 是用来写空行的,防止下面吧要添加的,追加到源文件的最后一行。使用临时文件“temp.txt”是因为,如果vsdir文件名种含有空格的话,下面这句for语句就不能正常执行。for语句中的in()中是不能有双引号的,如果有双引号,他指向的就是一个字符串,而非一个文件名了。for语句中的delims=也是必须的,因为for语句默认是以空格或TAB来划分字符串的,使用delims=就是为了整句输出,没有分隔符。如果想做的更完美一点的话,可以再第一段里在加上一句1. del %VS90COMNTOOLS%.VCVCWizardsRover12421*.bat复制代码这个就不用我来说了吧,呵呵。大家可以自己尝试制作卸载的bat,或其他方式制作安装卸载程序。好了,到这整个自定义对话框向导到这就讲完了。更新:前面说到的,在VCVCWizards下随便创建一个文件夹用来放我们的向导,但是我并没有说在哪设置这个路径。如果不设置这个路径,其实默认的还是使用我们原来创建向导项目的目录。这里要说到的就是vsz文件,我们的项目是 DialogBased Application.vsz 。用VS打开或用记事本等打开,我们会看到一句Param=ABSOLUTE_PATH = D:ProgrammingVS2008DialogBased ApplicationDialogBased Application这就是指令我们向导目录的。这里我们先来说两个参数。ABSOLUTE_PATH 向导文件的位置。这个是绝对路径RELATIVE_PATH 如果未找到 ABSOLUTE_PATH,则考虑使用 RELATIVE_PATH。这是相对于 PRODUCT_INSTALLATION_DIR 的路径。对于 Visual C+,RELATIVE_PATH 是 PRODUCT_INSTALLATION_DIRVCWizards。 这里我们就需要把ABSOLUTE_PATH换成RELATIVE_PATH,后面的路径使用相对路径,更改后如下:Param=RELATIVE_PATH = VCWizardsRover12421vsz是改好了,其实上面还有一个错误,就是需要把所有项目文件复制到想到名称命名的文件夹下,而不是直接拷贝到VCWizardsRover12421下。也就是需要把拷贝到VCWizardsRover12421下文件,改成拷贝到VCWizardsRover12421DialogBased Application下。安装相应的BAT也需要修改。更改后完整的BAT如下:1. copy *.ico %VS90COMNTOOLS%.VCvcprojects /y2. copy *.vsdir %VS90COMNTOOLS%.VCvcprojects /y3. copy *.vsz %VS90COMNTOOLS%.VCvcprojects /y4. xcopy *.* %VS90COMNTOOLS%.VCVCWizardsRover12421DialogBased Application /y /s5. del %VS90COMNTOOLS%.VCVCWizardsRover12421DialogBased Application*.bat6. echo.%VS90COMNTOOLS%.VCvcprojectsWin32win32.vsdir7. type *.vsdirtemp.txt8. for /f delims= %i in (temp.txt) do echo .%i%VS90COMNTOOLS%.VCvcprojectsWin32win32.vsdir9. del temp.txt10. 安装完毕11. pause复制代码VC中向导对话框的建立一、标准向导程序在 VC+中,可以使用类CPropertySheet和类CPropertyPage方便地编写一个向导程序。首先我们来介绍一下类CPropertySheet 和类CPropertyPage。1. 类CPropertyPage 是从CDiaglog中派生出来的,具有Diaglog的基本性质,需要注意的是它的样式必须是Child。2. 类CPropertySheet 是一个属性表,也是一个窗体,相当一个容器,用来存放所有的CpropertyPage。它不是从CDialog 派生出来的,但是它可以象普通对话框类似的操作, 如DoModal(),当用 DoModal()显示后,它就包含了“取消”、“上一步”、“下一步” 等基本按钮。下面给出一个实例 新建一个 VC+ MFC AppWizard 工程,命名为TraditionalWizard,并选择Dialog Based 样式。 在自动生成 的Dialog 资源中加入一个按钮IDC_BENGINWIZ 用来启动向导。 创建 CPropertyPage。新建Dialog 资源,命名为IDD_STEP1,注意一定要将新建对话框的Style属性设置成Child 和边界属性设置为Thin,并且不要生成一个新类。用ClassWizard 生成一个新类,命名为CStep1,基类为CPropertyPage,且将Dialog ID 设置为刚生成的资源IDD_STEP1。这样就生成了一个新属性页Step1。如此操作就可以 同样生成Step2、Step3 属性页。为了方便显示,在每个对话框都放置了一个控件,用来表示当前是哪一步。 创建 CPropertySheet。新建一个类,命名为CWizard,基类为CPropertySheet。并将属性页和属性表关联起来。代码为/将代码放在按钮IDC_BEGINWIZ的Click事件中CWizard MyWizard(_T(我的向导 ),this,1); /生成一个属性表CStep1 MyStep1; /属性页1 CStep2 MyStep2; /属性页2 CStep3 MyStep3; /属性页3 MyWizard.AddPage(&MyStep1); /添加属性页1 MyWizard.AddPage(&MyStep2); /添加属性页2 MyWizard.AddPage(&MyStep3); /添加属性页3MyWizard.SetWizardMode(); /将属性表设置成向导样式MyWizard.SetActivePage(&MyStep1); /设置第一页为第一步MyWizard.DoModal(); /显示属性表协调显示。在每一页为当前页时,都会触发OnSetActive事件,故对每一个属性页都要重载该函数,在CStep1类上选择Add Virtual Function .。因为显示第一页时,不存在“上一步”,故在CStep1的 OnSetActive函数中需要添加如下代码:/代码放在OnSetActive函数中CPropertySheet* pParent=(CPropertySheet*)GetParent(); / 获得属性表的指针pParent-SetWizardButtons(PSWIZB_NEXT); / 设置属性表的显示按钮只为下一步SetDlgItemText(IDC_TEXT1,这是向导的第一步); 同样在显示中间页时应该设置成即有“上一步”,也有“下一步”,代码为:CPropertySheet* pParent=(CPropertySheet*)GetParent(); pParent-SetWizardButtons(PSWIZB_NEXT|PSWIZB_BACK); SetDlgItemText(IDC_TEXT2,这是向导的第二步); 最后在显示最后一页时只显示“完成”和“上一步”,代码为:CPropertySheet* pParent=(CPropertySheet*)GetParent(); pParent-SetWizardButtons(PSWIZB_FINISH|PSWIZB_BACK); SetDlgItemText(IDC_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 爆破与拆除工程公司合伙协议书
- 人教版四年级上册语文-观潮-教学设计与反思(公开课获奖作品)
- 2025年A股市场展望分析报告:科技浪潮引领资产价值重估
- 岩石的组成课件
- 岩土力学课件3
- 小麻雀课件重点
- 和平分手协议离婚财产分割子女监护及共同财产协议
- 跨国并购项目股份变更及整合协议
- 智能交通系统工程结算付款协议书范本
- 旅行团导游综合服务合同
- 无取向硅钢热轧板翘皮缺陷成因及控制措施研究
- 普外科进修汇报课件
- 《普通话宣传周》中小学推广普通话主题班会模板
- 2025年中国电信集团招聘考试试题及答案全收录
- 浙江省G12名校协作体2025学年第一学期9月高三上学期开学联考数学试卷
- (9月3日)铭记历史珍爱和平-纪念中国人民抗日战争暨世界反法西斯战争胜利80周年爱国主义主题教育班会课件
- 2025广东汕尾市海丰县纪委监委招聘政府聘员6人笔试模拟试题及答案解析
- 5.1 文明有礼(教学课件) 统编版道德与法治 八年级上册
- 2025年事业单位工勤技能-河北-河北汽车驾驶与维修员二级(技师)历年参考题库含答案解析(5套)
- 2025年心理健康教育及辅导理论知识考试试卷及答案
- 非财务人员财务基础知识培训
评论
0/150
提交评论