二、 根据输入控制对话框上控件的有效性
在自定义了一个对话框之后,可能需要对对话框上的控件之间的关系进行一些控制,比如当选中了某单选框后,使一些控件有效,而选中其他的单选框后,另一些控件有效等等。要实现这些功能,就需要手动编写InstallShield脚本来实现了。
下面是一个在安装向导中添加了一个自定义对话框,在该步骤中实现在安装的时候在本机器上添加一个SQL Server的数据源。图“自定义对话框效果图”是该自定义对话框的运行效果图:
在该自定义对话框中,除了要完成配置SQL Server的数据源之外,还要完成其他一些辅助功能。为了在本机器上配置一个SQL Server数据源,需要输入该数据源的名称、该数据源是针对那个服务器的以及配置的是用户数据源还是系统数据源等数据,而数据库和服务器用户及口令则是完成辅助功能所需要的。只有当输入了必须的数据(如:服务器、数据库、用户名称、数据源等)之后,按钮“下一步”才能有效,为了达到这个要求,就需要对用户的输入进行判断,在InstallShield中可以用WaitOnDialog来得到当前对话框的事件。下面是完成该功能的一个完整脚本代码:
///////////////////////////////////////////////////////////////////////
// kdcis.rul
//
///////////////////////////////////////////////////////////////////////
#ifndef __KDCIS_RUL_
#define __KDCIS_RUL_
#include "winsysdll.h"
//
// Pre-defined script dialog constants
//
// ----- Attribute Dialog Controls ------
#define DLG_DSN_SQLSERVER 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_SQLSERVER_USER_PWD 1005
#define IDC_EDIT_SQLSERVER_DSN 1006
#define IDC_EDIT_SQLSERVER_DB 1007
// Function prototypes
///////////////////////////////////////////////////////////////
// 显示配置SQLSERVER数据源对话框
// 参数:
// BOOL bFirstStep:是安装的第一步吗?
// BOOL bAllowNotSet:是否允许跳过本次设置
// BYVAL STRING szTitle:对话框的标题
///////////////////////////////////////////////////////////////
prototype BuildSQLServerDSN(BOOL, BOOL, BYVAL STRING);
///////////////////////////////////////////////////////////////
// 校验配置数据源对话框的输入有效性
// 参数:
// HWND hwndDlg:配置对话框的句柄,从CmdGetHwndDlg中得到
// BOOL bAllowNotSet:是否允许跳过本次设置
// 备注:
// CheckSQLServerDSNInputValid:对SQLSERVER数据源配置进行校验
//////////////////////////////////////////////////////////////
prototype CheckSQLServerDSNInputValid(HWND, BOOL);
// Variable declaration
// Macro declaration
#define DSN_SQLSERVER_DLG "ConfigSQLServerDSNDLG"