2013-10-30 63 views
0

我在定制NSIS卸载程序页面上做了一些research,并且在Welcome和Finish页面取得了一些成功。自定义NSIS卸载程序确认页面

但是,我在使用确认页面的欢迎页面上使用相同的模板时遇到了问题。如果我的add any control using nsDialogs值为非零值height,则确认页面上的所有现有控件(除标题和按钮外)都将消失。

这里是我的代码(它成功地更新按钮的名称,但会删除该网页上的所有其他控件)

!include MUI2.nsh 

OutFile "CustomUninstaller.exe" 
InstallDir "C:\Program Files (x86)\NSIS\Examples\CustomFinish" 

!define APPNAME "Testing" 
Name "${APPNAME}" 

!insertmacro MUI_PAGE_INSTFILES 

!insertmacro MUI_UNPAGE_WELCOME 

!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ModifyUnConfirm ; My custom function for the Confirm page 
!insertmacro MUI_UNPAGE_CONFIRM 

!insertmacro MUI_UNPAGE_INSTFILES 
!insertmacro MUI_UNPAGE_FINISH 
!insertmacro MUI_LANGUAGE "English" 

Function un.ModifyUnConfirm 
    # Change "Uninstall" button to say "Continue" on uninstaller confirmation page 
    GetDlgItem $0 $HWNDPARENT 1 
    SendMessage $0 ${WM_SETTEXT} 0 "STR:Continue" 

    # Add new label. If these three lines are commented out, I see the regular controls of this page show up. 
    # The position, color and background of the label don't seem to matter 
    ${NSD_CreateLabel} 50% 50% 100% 10u "Testing!!!" 
    Pop $0 
    SetCtlColors $0 "" ${MUI_BGCOLOR} 
FunctionEnd 

Section TestUninstaller 
    WriteUninstaller "$INSTDIR\unCustomUninstaller.exe" 
    ExecWait "$INSTDIR\unCustomUninstaller.exe" 
Sectionend 

问题:

  1. 有谁知道为什么控件会消失?
  2. 如何成功地将控件添加到此页面需要做什么?

回答

2

MUI_UNPAGE_CONFIRM不是nsDialogs页面!

要更改此对话框,您可以使用ChangeUI命令。 您也可以在运行时添加控件,但只有通过系统插件:

Function un.ModifyUnConfirm 
    FindWindow $1 "#32770" "" $HWNDPARENT ; Find inner dialog 
    System::Call 'USER32::CreateWindowEx(i${__NSD_Label_EXSTYLE},t"${__NSD_Label_CLASS}",t "Testing!!!",i${__NSD_Label_STYLE},i 50,i 100,i 400, i 25,i$1,i0,i0,i0)i.s' 
    Pop $0 
    SendMessage $HWNDPARENT ${WM_GETFONT} 0 0 $1 
    SendMessage $0 ${WM_SETFONT} $1 1 
    SetCtlColors $0 "" ${MUI_BGCOLOR} ; This is the wrong color to use... 
FunctionEnd 
+0

我看到 - 我不知道该页面不被认为是nsDialgos页。很高兴知道。再次感谢安德斯。 – diaho