用VS制作对话框向导.docx

上传人:b****7 文档编号:10847378 上传时间:2023-02-23 格式:DOCX 页数:31 大小:28.77KB
下载 相关 举报
用VS制作对话框向导.docx_第1页
第1页 / 共31页
用VS制作对话框向导.docx_第2页
第2页 / 共31页
用VS制作对话框向导.docx_第3页
第3页 / 共31页
用VS制作对话框向导.docx_第4页
第4页 / 共31页
用VS制作对话框向导.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

用VS制作对话框向导.docx

《用VS制作对话框向导.docx》由会员分享,可在线阅读,更多相关《用VS制作对话框向导.docx(31页珍藏版)》请在冰豆网上搜索。

用VS制作对话框向导.docx

用VS制作对话框向导

用VS2008制作对话框向导

用VS2008制作对话框向导(完)

本内容整理自rover12421《用VS2008制作对话框向导(完)》

本人喜欢用VS,所以先说明,在这只教大家怎么用VS2008制作杨老师的那个对话框向导。

或许你还能做的比那个更好。

至于VC6的那个请自己查阅资料。

制作步骤:

1.制作一个对话框工程

2.创建一个空向导

3.制作对话框向导

4.怎么让别人使用你制作的向导制作前,先说下VS路径。

我是用的是默认路径:

C:

\ProgramFiles\MicrosoftVisualStudio9.0\VC。

如果不是这个路径的,请修改成对用的目录就行。

后面不再提示。

帖子因为中间有人回帖,和评分问题,所以操作步骤并不是一个一个的接着了,但也不是很乱。

希望对大家有帮助。

第二步,创建空向导。

文件--新建--VisualC++---自定义向导

下载(81.96KB)

2010-2-811:

03

我命名为DialogBasedApplication。

在弹出对话框点下一步。

下载(31.25KB)

2010-2-811:

03

这里,因为我们不需要交互操作,也不需要弹出什么提示,选择界面什么的,就不选择“用户界面”。

然后完成。

下载(24.35KB)

2010-2-811:

03

只有简单的几个文件。

制作向导最关键的是default.js文件和Templates.inf文件。

创建好以后,在“新建--项目--向导”里就能看到这个向导了

下载(61.27KB)

2010-2-811:

03

现在这个向导什么事也不能。

下一步再教大家制作一个功能完善的向导。

这节很简单,就说一些相关知识,以减少下节的负担。

首先看下怎么向导向导说明。

就是上图中位于名称上方的“TODO:

向导说明。

”这个需要在vsdir文件修改。

打开DialogBasedApplication.vsdir文件,只有简单的一行:

DialogBasedApplication.vsz||DialogBasedApplication|1|TODO:

向导说明。

||6777||DialogBasedApplication

大家一定看到了“TODO:

向导说明。

”这句话吧,我先来修改这句话,改成“DialogBasedApplication.By<Rover12421>”。

保存,然后新建项目选择我们刚才创建的向导,是不是已经改过来了?

如果以前创建过,可能这里并不能看出来。

关于vsdir文件,大家也可以参考MSDN,下面贴下MSDN上的一些说明,大家看看就行了。

可为VSDir文件中的每个记录指定下列字段:

字段

含义

 

RelPathName

必需。

向导的.vsz文件的名称(如MyWizard.vsz),此文件与VisualStudio安装目录有关。

 

{clsidPackage}

可选。

表示产品的GUID,该产品(如VisualC++)带有的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.33KB)

2010-2-813:

15

打开Win32DLG项目目录,选择所有的头文件,源文件和资源文件,拷贝到向导项目下的\Templates\2052下面.

下载(48.14KB)

2010-2-813:

15

然后在“模板文件”上点“右键--添加现有项”,把刚刚拷贝到\Templates\2052下的几个文件全部添加进来。

下载(34.54KB)

2010-2-813:

15

再打开Templates.inf文件,把添加的文件的文件名全部写到里面。

为什么要写着里呢?

这是我们使用向导新建项目所需要的文件,default.js通过调用AddFilesToCustomProj函数,把写在Templates.inf中的文件拷贝到新建的项目文件夹里。

下载(57.36KB)

2010-2-813:

15

现在我们来修改default.js文件。

找到GetTargetName函数,修改它。

修改后的代码:

1.

2.functionGetTargetName(strName,strProjectName)

3.{

4.try

5.{

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.}

functionGetTargetName(strName,strProjectName)

{

try

{

//TODO:

基于模板文件名设置呈现文件的名称

varstrTarget=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';

returnstrTarget;

}

catch(e)

{

throwe;

}

}

我们添加了4个if语句,用来把原来的文件名改成“新建的项目名”+扩展名。

这个规则可以自定义,但是一定要和后面的更改一致。

说下这个函数的两个参数,strName就是传进来的文件名,strProjectName就是传进来的项目名。

接着往上找到AddFilters函数,修改如下:

1.

2.functionAddFilters(proj)

3.{

4.try

5.{

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.}

functionAddFilters(proj)

{

try

{

//将文件夹添加到项目

//varstrSrcFilter=wizard.FindSymbol('SOURCE_FILTER');

//vargroup=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)

{

throwe;

}

}AddFilter(''),是我们要添加到项目中显示的那个目录里面,比如源文件、SourceFile,可以自定义,但最好写成相对应的中文或英文,Filter后面的就是判断的扩展名。

差不多这样就修改完成了。

可以先新建一个项目看看,看起来会没什么问题,但是编译会出错,这很正常,因为我们还有几个地方需要做小小的修改。

我们需要把所有老的项目名命名的地方全部改成新建的项目名,用到就是[!

outputPROJECT_NAME]。

一共有两个文件,一个是Win32DLG.cpp,一个是Win32DLG.rc

打开Win32DLG.cpp,找到#include"Win32DLG.h"

,修改成

#include"[!

outputPROJECT_NAME].h"

Win32DLG.rc是资源文件,不能直接双击编辑,要在上面点“右键,查看代码”。

下载(22.22KB)

2010-2-813:

15找到

IDI_WIN32DLGICON"Win32DLG.ico"

修改成

IDI_WIN32DLGICON"[!

outputPROJECT_NAME].ico"

还有一处

IDS_APP_TITLE"Win32DLG"

IDC_WIN32DLG"WIN32DLG"

对应的修改成

IDS_APP_TITLE"[!

outputPROJECT_NAME]"

IDC_WIN32DLG"[!

outputPROJECT_NAME]"

这样保存之后这个向导就算完成了。

大家可以自己用这个向导生成试试。

下一节讲讲怎么把这个向导给别人使用。

1.制作一个DialogBasedApplication(对话框应用程序)程序。

下载(60.32KB)

2010-2-809:

26

新建一个Win32项目,配置使用默认的就行。

我新建的项目是Win32DLG。

先看下这个项目有哪些文件

下载(18.1KB)

2010-2-809:

26

一共是10个文件。

首先我们需要修改的是资源文件----Win32DLG.rc。

这里的修改很简单。

新建一个Dialog对话框资源或直接修改现有的ABOUT对话框资源也行。

我用的新建。

在Dialog上点右键,插入Dialog.

下载(49.11KB)

2010-2-809:

26

默认的界面如下。

我们只保留一个确定按钮。

调整界面大小,标题,风格等等,这些很容易就不说了。

相信大家都会。

下载(13.05KB)

2010-2-809:

26

我修改的如下,并修改确认按钮的ID为IDC_OK。

主界面的ID为IDD_Main.

下载(10.63KB)

2010-2-809:

26

接着删除无用的资源IDD_ABOUTBOX和IDC_WIN32DLG

下载(18.41KB)

2010-2-809:

26

下载(13.35KB)

2010-2-809:

26

界面就修改好了。

接着就是重点,修改Win32DLG.cpp文件。

除了包含的头文件和WinMain函数,其他全部删除。

WinMain函数里也只保留前两句,和return。

并把“return(int)msg.wParam;”修改成“return0;”

下载(46.25KB)

2010-2-809:

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.#include"stdafx.h"

5.#include"Win32DLG.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.h"

intAPIENTRY_tWinMain(HINSTANCEhInstance,

HINSTANCEhPrevInstance,

LPTSTRlpCmdLine,

intnCmdShow)

{

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

DialogBox(hInstance,MAKEINTRESOURCE(IDD_Main),NULL,WinProc);

return0;

}

BOOLWINAPIWinProc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam)

{

switch(uMsg)

{

HANDLE_MSG(hWnd,WM_INITDIALOG,Main_OnInitDialog);

HANDLE_MSG(hWnd,WM_COMMAND,Main_OnCommand);

HANDLE_MSG(hWnd,WM_CLOSE,Main_OnClose);

}

returnFALSE;

}

BOOLMain_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam)

{

returnTRUE;

}

voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify)

{

switch(id)

{

caseIDC_OK:

{

MessageBox(hwnd,_T("HelloWorld"),_T("OK"),MB_OK);

}

break;

default:

break;

}

}

voidMain_OnClose(HWNDhwnd)

{

EndDialog(hwnd,0);

}主要的函数都写好了,按钮的事件也添加到Main_OnCommand里了。

现在就是要处理头文件。

打开Win32DLG.h头文件,添加函数声明。

先看看我们在Win3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1