自定义对话框

1、新增对话框:
    进入“User Interface”下的“Dialog”,右击“All Dialogs”,选择“New Dialog...”,在向导的第二步“Dialog Template”中选择需要的类型,此例中因为需要Dialog需要处理一些功能,所以选择了“NewScriptBaseDialog”。
    将新增的对话框改名,如“sdCheckDialog”,并进入其编辑状态,拖拉控件至窗体中,并设置相应的值。
这个有一个地方一定不能漏掉:窗体等控件的“Resource Identifier”的值,这个值在后面的脚本中对窗体或控件进行控制时要用到,假设将这个窗体的“Resource Identifier”值设为“10333”。
自定义对话框
 
2、写脚本:
    首先要新增一个脚本文件,过程如下:在“Behavior and Logic”中选择“InstallScript”,右击“File”选择“New Script File”,新增一个RUL文件,将这个文件的文件名改成新增的对话框相同的名字“sdCheckDialog”,在其中编辑代码如下:
 
#define RES_DIALOG_ID       10333 //对话框的ID
#define RES_PBUT_NEXT         1   // Next的ID
#define RES_PBUT_CANCEL       9   // OK的ID
#define RES_PBUT_BACK        12   // BACK的ID
#define RES_PLIST_RESULT     1302  //LIST控件的ID
#include "Ifx.h"
export prototype ExFn_DefineDialog(HWND); 
prototype CheckIE();

function ExFn_DefineDialog(hMSI)
    STRING  szDialogName, szDLLName, szDialog;
    NUMBER  nDialog, nResult, nCmdValue;
    BOOL    bDone,bInstall;
    HWND    hInstance, hwndParent; 
    NUMBER  nCtrlId, nType; 
    HWND    hwndDlg,hwndItem;
    LIST    listCheckResult;
begin
    //szDialogName = "自定义对话框";
    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);
        switch (nCmdValue)
            case DLG_CLOSE:
                // 关闭窗口
                Do (EXIT);
            case DLG_ERR:
                MessageBox ("无法显示自定义对话框", SEVERE);   
                abort;
            case DLG_INIT:
                hwndDlg = CmdGetHwndDlg( szDialogName );
                listCheckResult = ListCreate (STRINGLIST); //定义一个LIST
                
                //检察IE,此处是这个自定义对话框要实现的功能
                nResult = CheckIE();
                if nResult = 1 then
                    if (listCheckResult != LIST_NULL) then
                       ListAddString (listCheckResult, "IE版本小于6", AFTER);  //往List中添加字串
                       hwndItem = GetDlgItem( hwndDlg, RES_PBUT_NEXT ); //把下一步按钮置成不可用
                       EnableWindow( hwndItem, FALSE);
                  endif;
                else
                    ListAddString (listCheckResult, "您可以继续安装", AFTER);                   
                    //把下一步按钮置成可用
                    hwndItem = GetDlgItem( hwndDlg, RES_PBUT_NEXT );
                    EnableWindow( hwndItem, TRUE);
                 endif;
               
                 //将List的内容添加到LISTBOX控件中
                 nResult = CtrlSetList (szDialogName, RES_PLIST_RESULT, listCheckResult);
                  if (nResult != 0) then
                        MessageBox ("不能添加信息", SEVERE); 
                        bDone = FALSE;
                    endif;  
                endif;      
                 ListDestroy(listCheckResult);
            case RES_PBUT_CANCEL:
                SdCloseDlg( hwndDlg, nType, bDone );
            case RES_PBUT_NEXT:
                nType = NEXT; 
                bDone = TRUE;
            case RES_PBUT_BACK:
                nType = BACK;
                bDone = TRUE;
        endswitch;
    until bDone;
    //关闭对话框
    EndDialog (szDialogName);
    //释放内存
    ReleaseDialog (szDialogName);
    return nType;
end;    

 //CheckIE函数
function CheckIE()
    NUMBER nvType, nvSize;
    STRING szVer1,szVer2,szKey,szName,szValue;
    number nValue;
begin    
    szKey="SOFTWARE//Microsoft//Internet Explorer";
    szName="version";
    RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
    RegDBGetKeyValueEx(szKey, szName, nvType, szVer1, nvSize) ; 
    szVer2 = "6.0.0000.0000";
    nValue = VerCompare(szVer1,szVer2,VERSION);  //版本比较,返回1表示第一个值小于第二个值
    return nValue;
end; 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值