InstallshieldX安装制作杂记(实例之自定义对话框)

作者: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!

你可能感兴趣的:(String,function,prototype,脚本,dialog,button)