InstallShield创建自定义对话框的基本方法

Installshield的InstallScript项目

1.在Dialogs视图中,右键All Dialog,选择新建对话框(New Dialog)
2.创建一个空白对话框,命名为MyDlg.
3.双击MyDlg下的子项即可进入对话框的编辑模式
4.这里我们添加一个Hello按钮。选择按钮控件然后在对话框的界面上拖拉出一个按钮控件。
    修改按钮属性text为Hello。注意一下这里的Control Identifer属性值,后面我们会用到。

5.在installscript视图中新建一个rul文件,命名为MyDlg.url
6.编写MyDlg.url
内容如下:
#define DLG_MYDLG "MyDlg" //MyDlg是我们的对话框名字
#define HELLOBTN 1301 //1301就是我们那个按钮的Control Identifer属性值

prototype NUMBER MyDlg(BYREF STRING);

function NUMBER MyDlg(msg)
     HWND    hDlg;     
     NUMBER nId, nResult;
    NUMBER nControl;
    BOOL bDone;
begin
    //初始对话框函数
     if (EzDefineDialog( DLG_MYDLG,ISUSER , "MyDlg", 0 ) = DLG_ERR) then        
     return ISERR_GEN_FAILURE;
    endif;   
      
    bDone = FALSE;
    //循环
    while (!bDone)
        nId = WaitOnDialog( DLG_MYDLG ); //获得对话框的消息   
        switch (nId)    
        case HELLOBTN:      //如果是HELLOBTN
            MessageBox(msg,WARNING);
            bDone=TRUE;                                       
        case DLG_ERR:       
            nId   = ISERR_GEN_FAILURE;
            SdError(nId, DLG_MYDLG);
            bDone = TRUE;   
           
        case DLG_CLOSE:             
            SdCloseDlg(hDlg, nId, bDone);  
           
        default:
            // check standard handling
            if (SdIsStdButton(nId) && SdDoStdButton(nId)) then
                bDone = TRUE;
            endif;
                                           
        endswitch;
    endwhile;
end;


7.setup.url内容:
//添加的内容是 #include "MyDlg.rul"
//以及我们自定义的对话框。其他的代码都是自动生成的。
// First Install UI Sequence - Before Move Data
//
// The OnFirstUIBefore event is called by OnShowUI when the setup is
// running in first install mode. By default this event displays UI allowing
// the end user to specify installation parameters.
//
// Note: This event will not be called automatically in a
// program...endprogram style setup.
//---------------------------------------------------------------------------
#include "MyDlg.rul"
function OnFirstUIBefore()
    number nResult, nLevel, nSize, nSetupType;
    string szTitle, szMsg, szOpt1, szOpt2, szLicenseFile;
    string szName, szCompany, szTargetPath, szDir, szFeatures;
    BOOL    bLicenseAccepted;   
begin   
  
    nSetupType = COMPLETE;   
    szDir = TARGETDIR;
    szName = "";
    szCompany = "";
    bLicenseAccepted = FALSE;

// Beginning of UI Sequence
Dlg_Start:
    nResult = 0;

Dlg_SdWelcome:
    szTitle = "";
    szMsg = "";
    //{{IS_SCRIPT_TAG(Dlg_SdWelcome)
    nResult = SdWelcome( szTitle, szMsg );
    //}}IS_SCRIPT_TAG(Dlg_SdWelcome)
    if (nResult = BACK) goto Dlg_Start;
Dlg_Hello:
我们自定义的对话框
    szTitle="";   
    szMsg="It's my hello DLG";
    nResult=MyDlg(szMsg);
    if (nResult=BACK) goto Dlg_Start;
Dlg_SdLicense2:
    szTitle = "";
    szOpt1 = "";
    szOpt2 = "";
    //{{IS_SCRIPT_TAG(License_File_Path)
    szLicenseFile = SUPPORTDIR ^ "License.rtf";
    //}}IS_SCRIPT_TAG(License_File_Path)
    //{{IS_SCRIPT_TAG(Dlg_SdLicense2)
    nResult = SdLicense2Rtf( szTitle, szOpt1, szOpt2, szLicenseFile, bLicenseAccepted );
    //}}IS_SCRIPT_TAG(Dlg_SdLicense2)
    if (nResult = BACK) then
        goto Dlg_SdWelcome;
    else
        bLicenseAccepted = TRUE;
    endif;    
   

Dlg_SdRegisterUser:
    szMsg = "";
    szTitle = "";
    //{{IS_SCRIPT_TAG(Dlg_SdRegisterUser)   
   // nResult = SdRegisterUser( szTitle, szMsg, szName, szCompany );
    //}}IS_SCRIPT_TAG(Dlg_SdRegisterUser)
    if (nResult = BACK) goto Dlg_MyDlg;

Dlg_SetupType2:  
    szTitle = "";
    szMsg = "";
    nResult = CUSTOM;
    //{{IS_SCRIPT_TAG(Dlg_SetupType2)   
   // nResult = SetupType2( szTitle, szMsg, "", nSetupType, 0 );
    //}}IS_SCRIPT_TAG(Dlg_SetupType2)
    if (nResult = BACK) then
        goto Dlg_SdRegisterUser;
    else
        nSetupType = nResult;
        if (nSetupType != CUSTOM) then
            szTargetPath = TARGETDIR;
            nSize = 0;
            FeatureCompareSizeRequired( MEDIA, szTargetPath, nSize );
            if (nSize != 0) then     
                MessageBox( szSdStr_NotEnoughSpace, WARNING );
                goto Dlg_SetupType2;
            endif;
        endif;  
    endif;

Dlg_SdAskDestPath2:
    if ((nResult = BACK) && (nSetupType != CUSTOM)) goto Dlg_SetupType2;
    szTitle = "";
    szMsg = "";
    if (nSetupType = CUSTOM) then
                //{{IS_SCRIPT_TAG(Dlg_SdAskDestPath2)   
        nResult = SdAskDestPath2( szTitle, szMsg, szDir );
                //}}IS_SCRIPT_TAG(Dlg_SdAskDestPath2)
        TARGETDIR = szDir;
    endif;
    if (nResult = BACK) goto Dlg_SetupType2;

Dlg_SdFeatureTree:
    if ((nResult = BACK) && (nSetupType != CUSTOM)) goto Dlg_SdAskDestPath2;
    szTitle = "";
    szMsg = "";
    szFeatures = "";
    nLevel = 2;
    if (nSetupType = CUSTOM) then
        //{{IS_SCRIPT_TAG(Dlg_SdFeatureTree)   
       // nResult = SdFeatureTree( szTitle, szMsg, TARGETDIR, szFeatures, nLevel );
        //}}IS_SCRIPT_TAG(Dlg_SdFeatureTree)
        if (nResult = BACK) goto Dlg_SdAskDestPath2;
    endif;

Dlg_SQLServer:
    nResult = OnSQLServerInitialize( nResult );
    if( nResult = BACK ) goto Dlg_SdFeatureTree;

Dlg_ObjDialogs:
    nResult = ShowObjWizardPages( nResult );
    if (nResult = BACK) goto Dlg_SQLServer;
   
Dlg_SdStartCopy2:
    szTitle = "";
    szMsg = "";
    //{{IS_SCRIPT_TAG(Dlg_SdStartCopy2)   
    nResult = SdStartCopy2( szTitle, szMsg );   
    //}}IS_SCRIPT_TAG(Dlg_SdStartCopy2)
    if (nResult = BACK) goto Dlg_ObjDialogs;

    // Added in 11.0 - Set appropriate StatusEx static text.
    SetStatusExStaticText( SdLoadString( IDS_IFX_STATUSEX_STATICTEXT_FIRSTUI ) );

    return 0;
end;

编译运行就可以看到自己的对方框了。

你可能感兴趣的:(InstallShield创建自定义对话框的基本方法)