




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、InstallShield自定义对话框浅谈说明:本文档的InstallShield为6.22版本,语言:中文。操作系统为Windows2000。资源编辑工具:Microsoft Visual C + 6.0。修改的DLL:_isuer.dll。 此主题相关图片如下:InstallShield允许添加自定义对话框来满足不同的需求,关于如何创建一个新的对话框资源,有很多参考资料可以查询,就不多说了。这里主要说明的有以下几个方面: 1、 如何创建具有InstallShield Wizard同样风格的对话框。 2、 如何编写脚本来控制自定义对话框上的输入和控
2、件的有效性判断 。 一、 创建具有InstallShield Wizard同样风格的对话框在安装向导中可能需要加入一些自定义的步骤,这时可能需要插入一些自定义的对话框来作为某步骤,为了能够把自定义对话框的步骤完全融入导InstallShield Wizard中,即自定义对话框要具有和InstallShield标准步骤同样的风格,下图是InstallShield某标准步骤的图片: 标准
3、步骤示例 在上图中,已经把标准向导对话框的一些风格标注出来了:、,为该步骤功能说明,并且该说明以黑体字表达;为对该功能的补充说明;为InstallShield的图标;为InstallShield的标注。 那么如何在自定义对话框中实现这些特性呢?下面就对这四个特殊地方作说明: 首先,这四个地方都是一个标签控件,在VC+中表现为静态控件(CStatic)。 处是表明该步骤功能的地方,那
4、么如何实现黑体的风格呢?其实InstallShield内嵌的机制已经对此作了定义了。在自定义对话框上添加一个静态控件,并且设置该控件的ID为50,并且使Extended Styles中的Transparent属性有效,然后在Caption中写上自定义的功能。该控件的位置为(10,3)。设置了这些后,InstallShield会自动把控件中的字体改为黑体。 处为该同样设置Extend
5、ed Styles的Transparent属性有效,然后在Caption中写上补充说明。该控件的位置为(17,15)。 处为InstallShield的图标,该图标也是用静态控件来实现的。在自定义对话框上添加一个静态控件,设置该控件的ID为1200,并且使Styles中的Simple属性有效和Extended Styles的Transparent属性有效,在Caption中填上:1
6、0550,10551;1;0;0,128,128。该控件的位置为(0,0),大小为(332 x 218)。设置了这些后,InstallShield会自动在该控件中加入该图标。 处为InstallShield的标注,但是不同于普通效果。在自定义对话框上添加一个静态控件,设置该控件的ID为7,把Caption清空,并且把控件的Visible属性去掉。InstallShield会自动把该
7、控件设置成标准效果。 在设置了以上四个地方之后,还需要在添加一个静态控件,设置该控件的ID为52,把Caption清空,位置为(0,0),大小为(332 x 218)。运行的实际效果,就和标准的安装步骤中的效果一样了。二、 根据输入控制对话框上控件的有效性在自定义了一个对话框之后,可能需要对对话框上的控件之间的关系进行一些控制,比如当选中了某单选框后,使一些控件有效,而选中其他的单选框后,另一些控件有效等等。要实现这些功能,就需要手动编写InstallShield脚本来实现了。下面是一个在安装向导中添加了一个自定义对话框,在该步骤中实现在安装的时候在本机器上添加一个SQL Server的数据源
8、。图“自定义对话框效果图”是该自定义对话框的运行效果图:此主题相关图片如下:在该自定义对话框中,除了要完成配置SQL Server的数据源之外,还要完成其他一些辅助功能。为了在本机器上配置一个SQL Server数据源,需要输入该数据源的名称、该数据源是针对那个服务器的以及配置的是用户数据源还是系统数据源等数据,而数据库和服务器用户及口令则是完成辅助功能所需要的。只有当输入了必须的数据(如:服务器、数据库、用户名称、数据源等)之后,按钮“下一步”才能有效,为了达到这个要求,就需要对用户的输入进行判断,在InstallShield中可以用WaitOnDialog来得到当前对话框的事件。下面是完成
9、该功能的一个完整脚本代码:/ kdcis.rul/#ifndef _KDCIS_RUL_#define _KDCIS_RUL_ #include "winsysdll.h"/ Pre-defined script dialog constants/ / - Attribute Dialog Controls -#define DLG_DSN_SQLSERVER &
10、#160; 30001#define IDC_RADIO_DSN_USER 1001#define IDC_RADIO_DSN_SYSTEM 1002#define IDC_EDIT_DB_ADDR 1003#define IDC_EDIT_SQLSERVER_USER_NAME 1004#define IDC_EDIT_SQL
11、SERVER_USER_PWD 1005#define IDC_EDIT_SQLSERVER_DSN 1006#define IDC_EDIT_SQLSERVER_DB 1007 file:/- / Function prototypes file:/-/ 显示配置SQ
12、LSERVER数据源对话框/ 参数:/ BOOL bFirstStep:是安装的第一步吗?/ BOOL bAllowNotSet:是否允许跳过本次设置/ BYVAL STRING szTitle:对话框的标题/prototype BuildSQLServerDSN(BOOL, BOOL, BYVAL STRING;/ 校验配置数据源对话框的输入有效性/ 参数:/ HWND hwndDlg:配置对话框的句柄,从Cm
13、dGetHwndDlg中得到/ BOOL bAllowNotSet:是否允许跳过本次设置/ 备注:/ CheckSQLServerDSNInputValid:对SQLSERVER数据源配置进行校验/prototype CheckSQLServerDSNInputValid(HWND, BOOL; file:/-
14、160; / Variable declaration file:/- file:/- / Macro declaration &
15、#160; file:/-#define DSN_SQLSERVER_DLG "ConfigSQLServerDSNDLG"/*-*/ /*
16、; */ /* Function: BuildSQLServer
17、DSN */ /*
18、60;
19、60; */ /* Descrip: use custom sqlserver's dsn dlg to create dsn. */ /*
20、;
21、; */ /* Misc:
22、 */ /* &
23、#160; &
24、#160; */ /*-*/ function BuildSQLServerDSN(bFirstStep, bAllowNotSet,szTitle BOOL bDone; NUMBER nMessage;
25、;STRING szSQLAddr, szSQLDB, szDBUserName, szDBUserPwd, szSQLDSN; SHORT nDSNType; STRING svArg1024; STRING svDSN, svAddr,
26、 svDB, svUID, svPWD; NUMBER nSplitPos; HWND hwndDlg; BOOL bBuildResult;
27、 SHORT wErrMsgLen; STRING szErrMsgMAX_PATH + 1; LONG dwErrCode; begin bDone = FALS
28、E; / 用EzDefineDialog定义一个对话框 nMessage = EzDefineDialog(DSN_SQLSERVER_DLG, ISUSER, "", DLG_DSN_SQLSERVER; if(nMessage = DLG_ERR then MessageBox("不能进行配置S
29、QLSERVER数据源找不到对话框", SEVERE; bDone = TRUE; endif; while(bDone = FALSE nMessage = WaitOnDialog(DSN_SQ
30、LSERVER_DLG; switch(nMessage case DLG_INIT:
31、160; hwndDlg = CmdGetHwndDlg(DSN_SQLSERVER_DLG; CheckSQLServerDSNInputValid(hwndDlg, bAllowNotSet; if(bFirstStep then &
32、#160; _WinSubEnableControl(hwndDlg, SD_PBUT_BACK, 0; endif;
33、; _WinSubSetWindowTitle(hwndDlg, szTitle; CtrlSetState(DSN_SQLSERVER_DLG, IDC_RADIO_DSN_USER, BUTTON_CHECKED;
34、60; case DLG_ERR: MessageBox("不能显示配置SQLSERVER数据源对话框", SEVERE;
35、0; bDone = TRUE; case CANCEL: bDone = TRUE; &
36、#160; case DLG_CLOSE: bDone = TRUE;
37、0; case SD_PBUT_CONTINUE: / 调用接口添加一个dsn / . &
38、#160; CtrlGetText(DSN_SQLSERVER_DLG, IDC_EDIT_DB_ADDR, szSQLAddr; CtrlGetText(DSN_SQLSERVER_DLG, IDC_EDIT_SQLSERVER_DB, szSQLDB;
39、160; CtrlGetText(DSN_SQLSERVER_DLG, IDC_EDIT_SQLSERVER_USER_NAME, szDBUserName; CtrlGetText(DSN_SQLSERVER_DLG, IDC_EDIT_SQLSERVER_USER_PWD, szDBUserP
40、wd; CtrlGetText(DSN_SQLSERVER_DLG, IDC_EDIT_SQLSERVER_DSN, szSQLDSN; if(StrLength(szSQLAddr = 0 then
41、; if(AskYesNo("没有输入服务器,是否以后进行配置?", YES = NO then _WinSubFocusControl(hwndDlg, I
42、DC_EDIT_DB_ADDR; else bDone = TRUE;
43、0; endif; elseif(StrLength(szSQLDB = 0 then
44、60; if(AskYesNo("没有输入数据库,是否以后进行配置?", YES = NO then _WinSubFocusControl(hwndDlg, IDC_EDIT_SQLSERVER_DB;
45、 else bDone = TRUE;
46、60; endif; elseif(StrLength(szDBUserName = 0 then if(AskYesNo("没有输入数据库用
47、户,是否以后进行配置?", YES = NO then _WinSubFocusControl(hwndDlg, IDC_EDIT_SQLSERVER_USER_NAME;
48、60; else bDone = TRUE; endif
49、; elseif(StrLength(szSQLDSN = 0 then if(AskYesNo("没有输入数据源名称,是否以后进行配置?", YES = NO then
50、0; _WinSubFocusControl(hwndDlg, IDC_EDIT_SQLSERVER_DSN; else
51、0; bDone = TRUE; endif;
52、; else / 已经获取了所有数据,可以调用SQLConfigDataSource添加数据源了
53、0; / 组织语句 / 注:由于DSN不保存UID和PWD,所以在Attribute中不能加入这两个 / 关键字,并且
54、每个关键子之间用'0'分割,由于InstallShield / 中不支持一个字符串中间存在'0',因此,不能直接用+连接这些
55、; / 关键字,下面是一个变通的方法 if(CtrlGetState(DSN_SQLSERVER_DLG, IDC_RADIO_DSN_USER = BUTTON_CHECKED then &
56、#160; nDSNType = ODBC_ADD_DSN; else
57、; nDSNType = ODBC_ADD_SYS_DSN; endif;
58、60; svDSN = "DSN=" + szSQLDSN; svAddr = "SERVER=" + szSQLAddr;
59、 svDB = "DATABASE=" + szSQLDB; svUID = "UID=" + szDBUserName;
60、svPWD = "PWD=" + szDBUserPwd; svArg = svDSN + ' ' + svAddr + ' ' + svDB;
61、160; nSplitPos = StrLength(svDSN; svArgnSplitPos = '0' nSplitP
62、os += StrLength(svAddr + 1; svArgnSplitPos = '0' nSplitPos += StrLength(sv
63、DB + 1; svArgnSplitPos = '0' / 调用ODBCCP32中的SQLConfigDataSource添加一个DSN
64、0; / 如果返回FALSE,表示添加失败,这时可以调用 / SQLInstallerError来得到失败的原因
65、160; bBuildResult = SQLConfigDataSource(NULL, nDSNType, "SQL Server", svArg; if(bBuildResult then
66、; / 如果添加成功 &
67、#160; bDone = TRUE; else
68、0; / 添加失败
69、60; wErrMsgLen = MAX_PATH;
70、160; SQLInstallerError(1, &dwErrCode, szErrMsg, wErrMsgLen, &wErrMsgLen;
71、60; if(bAllowNotSet then szErrMsg = "配置数据源失败"
72、; + szErrMsg + "!是否以后进行配置?" if(AskYesNo(szErrMsg, YES = NO then
73、60; bDone = FALSE;
74、; else bDone = TRUE;
75、160; endif;
76、 else szErrMsg = "配置数据源失败" + szErrMsg + "!" &
77、#160; MessageBox(szErrMsg, SEVERE; &
78、#160; endif; endif; endif; &
79、#160; case SD_PBUT_BACK: / 上一步
80、60; bDone = TRUE; case SD_PBUT_EXITSETUP: bDone = TRUE; &
81、#160; case IDC_RADIO_DSN_USER: CheckSQLServerDSNInputValid(hwndDlg, bAllowNotSet;
82、 case IDC_RADIO_DSN_SYSTEM: CheckSQLServerDSNInputValid(hwndDlg, bAllowNotSet;
83、60; case IDC_EDIT_DB_ADDR: CheckSQLServerDSNInputValid(hwndDlg, bAllowNotSet;
84、0; case IDC_EDIT_SQLSERVER_USER_NAME: CheckSQLServerDSNInputValid(hwndDlg, bAllowNotSet;
85、; case IDC_EDIT_SQLSERVER_USER_PWD: CheckSQLServerDSNInputValid(hwndDlg, bAllowNotSet;
86、 case IDC_EDIT_SQLSERVER_DSN: CheckSQLServerDSNInputValid(hwndDlg, bAllowNotSet; &
87、#160; case IDC_EDIT_SQLSERVER_DB: CheckSQLServerDSNInputValid(hwndDlg, bAllowNotSet;
88、60; endswitch; endwhile; EndDialog(DSN_SQLSERVER_DLG; ReleaseDialog
89、(DSN_SQLSERVER_DLG; if(nMessage = SD_PBUT_CONTINUE then return NEXT; elseif(nMessage = SD_PBUT_BACK then
90、; return BACK; else Do(EXIT; endif; end;/*-*/ /*
91、160;
92、160; */ /* Function: CheckSQLServerDSNInputValid
93、160; */ /*
94、160; */ /* Descrip: check the input data is valid.
95、; */ /* do not need to check the pwd if empty
96、60; */ /* Misc:
97、0; */ /*
98、;
99、; */ /*-*/ function CheckSQLServerDSNInputValid(hwndDlg, bAllowNotSet STRING szDBUserName; STRING szSQLDB; STRING szSQLAddr;
100、160;STRING szSQLDSN; begin if(bAllowNotSet then _WinSubEnableControl(hwndDlg, SD_PBUT_CONTINUE, 1;
101、 return 1; endif; if(CtrlGetState(DSN_SQLSERVER_DLG, IDC_RADIO_DSN_USER = BUTTON_UNCHECKED && (CtrlGetState(DSN_SQL
102、SERVER_DLG, IDC_RADIO_DSN_SYSTEM = BUTTON_UNCHECKED then _WinSubEnableControl(hwndDlg, SD_PBUT_CONTINUE, 0; return 0;
103、160; endif; CtrlGetText(DSN_SQLSERVER_DLG, IDC_EDIT_SQLSERVER_USER_NAME, szDBUserName; if(StrLength(szDBUserName = 0 then _WinSubEnableControl(hwnd
104、Dlg, SD_PBUT_CONTINUE, 0; return 0; endif; CtrlGetText(DSN_SQLSERVER_DLG, IDC_EDIT_SQLSERVER_DSN, szSQLDSN; if(StrLength(szSQLDS
105、N = 0 then _WinSubEnableControl(hwndDlg, SD_PBUT_CONTINUE, 0; return 0; else if(
106、!SQLValidDSN(szSQLDSN then MessageBox("输入了无效的数据源名称!", INFORMATION; _WinSubFocusControl(hwndDlg, IDC_EDIT_SQLSERVER_DSN; return 0; endif; endif; CtrlGetText(DSN_SQLSERVER_DLG, IDC_EDIT_SQLSERVER_DB,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度商业企业购销合同印花税税率调整与税务风险防范协议
- 2025年度代付农民工工资保障服务合同模板
- 2025年度公司法人挂名品牌授权合同
- 2025年度劳动仲裁调解协议范文:智能制造领域员工纠纷处理指南
- 2025年惠州城市职业学院单招职业适应性测试题库附答案
- 2025年澳大利亚数字商务消费者见解报告(英文版)-Wunderkind
- 2025年度宅基地永久转让与农村旅游项目投资合同
- 2024大众养老金融调研报告-太平洋保险
- 2025年度家庭紧急救援服务家政合同范例双方
- 2025年哈密职业技术学院单招职业适应性测试题库汇编
- 《小儿计划免疫》课件
- 林下经济产业现状及发展重点分析
- 地推推广合作协议书
- 开展户外探险与户外活动课件
- HXD3、HXD3CA型电力机车应急故障处理
- 新浪舆情通建设方案
- 护理四种注射法课件
- 物流营销(第四版) 课件 第六章 物流营销策略制定
- 小学数学解决问题题型及解题思路归类汇总
- 壮医滚蛋治疗护理技术操作规范
- 人教版(2023) 选择性必修第三册 Unit 1 Art Using Language教案
评论
0/150
提交评论