如何调用自定义对话框?Installshield帮助中有说明,但有一些环节弄不好就无法实验成功。比如ControlID, DialogID等。
通过自己的摸索,我完成了自定义对话框的建立、事件编写已经调用,现整理出来,希望能给大家提供帮助。
1.新建对话框
(1)在User Interface->dialogs中新建一个Dialog,命名为cstlDialog;
(2)通过Control tool bar加入一个Text Area,Text属性填入"我的自定义对话框";
(3)加入三个Push Button,分别设置Text属性为Back,OK,Next,Control Identifier分别设置为14,13,15。其他控件可以根据需要添加;
(4)Additional Tools->Direct Editor找到Dialog,设置cstlDialog的ISResourceID为10333(如果有重复就改变数字) 。
2.编写对话框事件
新建一个脚本文件,命名,比如叫"cstlDialog.rul"
粘贴如下代码:
#define RES_DIALOG_ID 10333//对话框的ID
#define RES_PBUT_NEXT   ; ; ; 15 // Next 按钮的ID
#define RES_PBUT_OK 13 // OK按钮的ID
#define RES_PBUT_BACK   ; ; ;14 // BACK按钮的ID
#include "Ifx.h"
export prototype ExFn_DefineDialog(HWND);
function ExFn_DefineDialog(hMSI)
STRING szDialogName, szDLLName, szDialog;
NUMBER nDialog, nResult, nCmdValue;
BOOL bDone;
HWND hInstanc e, hwndParent; & nbsp;
// STRING sValue;
begin
szDialogName = "cstl的自定义对话框";
hInstance = 0;//默认值
szDLLName = ""; ////默认值
szDialog = "";//如果指定了对话框的ID,这里就设置为空字符串。
hwndParent = 0;//保留参数,必须为0
nResult = DefineDialog (szDialogName, hInstance, szDLLName,
RES_DIALOG_I D, szDialog, hwndParent,
HWND_INSTALL , DLG_MSG_STANDARD|DLG_CENTERED);
// 错误检查
if (nResult < 0) then
MessageBox ("出错了.", SEVERE);
bDone = TRUE;
abort;
endif;
bDone = FALSE;
//循环
repeat
//显示对话框,nCom Value返回在对话框中的事件,如果正常,返回Control ID
nCmdValue = WaitOnDialog(szDialogName);
//NumToStr(s Value,nCmdValue);
//MessageBox (sValue,INFORMATION);
switch (nCmdValue)
case DLG_CLOSE:
// 关闭窗口
Do (EXIT);
case DLG_ERR:
MessageBox ("无法显示自定义对话框,安装取消.", SEVERE);
abort;
case DLG_INIT: ;