作者:fbysss Blog:blog.csdn.net/fbysss 声明:本文章由fbysss原创,转载或引用请注明引用地址。 如何调用自定义对话框?Installshield帮助中有说明,但有一些环节弄不好就无法实验成功。比如ControlID,DialogID等。 通过自己的摸索,我完成了自定义对话框的建立、事件编写已经调用,现整理出来,希望能给大家提供帮助。 1.新建对话框 (1)在User Interface->dialogs中新建一个Dialog,命名为fbysssDialog; (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,设置fbysssDialog的ISResourceID为10333(如果有重复就改变数字)。 2.编写对话框事件 新建一个脚本文件,命名,比如叫"fbysssDialog.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 hInstance, hwndParent; // STRING sValue; begin
szDialogName = "fbysss的自定义对话框"; hInstance = 0;//默认值 szDLLName = ""; ////默认值
szDialog = "";//如果指定了对话框的ID,这里就设置为空字符串。 hwndParent = 0;//保留参数,必须为0 nResult = DefineDialog (szDialogName, hInstance, szDLLName, RES_DIALOG_ID, szDialog, hwndParent, HWND_INSTALL, DLG_MSG_STANDARD|DLG_CENTERED); // 错误检查 if (nResult < 0) then MessageBox ("出错了.", SEVERE); bDone = TRUE; abort; endif;
bDone = FALSE;
//循环 repeat
//显示对话框,nComValue返回在对话框中的事件,如果正常,返回Control ID nCmdValue = WaitOnDialog(szDialogName);
//NumToStr(sValue,nCmdValue); //MessageBox(sValue,INFORMATION); switch (nCmdValue) case DLG_CLOSE: // 关闭窗口 Do (EXIT); case DLG_ERR: MessageBox ("无法显示自定义对话框,安装取消.", SEVERE); abort; case DLG_INIT: ; //初始化,啥不不干 case RES_PBUT_OK: // OK按钮被按下 MessageBox("OK按钮被按下了。",INFORMATION); case RES_PBUT_NEXT: MessageBox("Next按钮被按下了。",INFORMATION); bDone = TRUE; case RES_PBUT_BACK: MessageBox("BACK按钮被按下了。",INFORMATION); bDone = TRUE; endswitch;
until bDone;
//关闭对话框 EndDialog (szDialogName);
//释放内存 ReleaseDialog (szDialogName);
end;
3.调用对话框
在Setup.rul头部加入#include “fbysssDialog.rul“ ExFn_DefineDialog(0);//调用,这句话根据需要写在相应的地方。比如一开始就显示,写在function OnFirstUIBefore() 的begin之后。 编译运行,是不是看到效果了?cool! 
|