NSD_GetState returns 0 始终:NSIS
NSD_GetState returns 0 always: NSIS
我试图在我的卸载程序中包含一个复选框。我能够将复选框放在适当的位置。但是,当我尝试获取复选框的状态时,即使选中了复选框,它也总是 returns 0 。这是我使用的代码
!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ModifyUnWelcome
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_INSTFILES
!define MUI_FINISHPAGE_TITLE_3LINES
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.LeaveUnWelcome
!insertmacro MUI_UNPAGE_FINISH
Function un.ModifyUnWelcome
${NSD_CreateCheckbox} 120u -18u 50% 25u "Do something special"
Pop $mycheckbox
SetCtlColors $mycheckbox "" ${MUI_BGCOLOR}
${NSD_Check} $mycheckbox ; Check it by default
FunctionEnd
Function un.LeaveUnWelcome
${NSD_GetState} $mycheckbox [=12=]
MessageBox MB_OK "On Leave mycheckbox = $mycheckbox $\n $[=12=] = [=12=]"
${If} [=12=] <> 0
MessageBox mb_ok "I'm special"
${EndIf}
FunctionEnd
因此我无法验证复选框是否被选中。
我的代码有什么问题,我该如何解决?
我什至试过下面这样的东西
${NSD_Check} $mycheckbox ; Check it by default
${NSD_SetState} $mycheckbox ${BST_CHECKED}
我从Adding a checkbox to the NSIS Uninstaller Welcome Page
得到了上面的代码
您的自定义函数引用了两个不同的页面。
ModifyUnWelcome 在创建 MUI_UNPAGE_WELCOME 页面时调用,LeaveUnWelcome - 当用户离开最后一个 MUI_UNPAGE_FINISH 页面时调用。
当您调用 ${NSD_GetState} 时,由 ModifyUnWelcome 句柄拥有的控件将被销毁。您应该将自定义函数定义放置在 附近 并且 在 引用页面声明之前。
!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ModifyUnWelcome
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.LeaveUnWelcome
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_INSTFILES
!define MUI_FINISHPAGE_TITLE_3LINES
!insertmacro MUI_UNPAGE_FINISH
我试图在我的卸载程序中包含一个复选框。我能够将复选框放在适当的位置。但是,当我尝试获取复选框的状态时,即使选中了复选框,它也总是 returns 0 。这是我使用的代码
!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ModifyUnWelcome
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_INSTFILES
!define MUI_FINISHPAGE_TITLE_3LINES
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.LeaveUnWelcome
!insertmacro MUI_UNPAGE_FINISH
Function un.ModifyUnWelcome
${NSD_CreateCheckbox} 120u -18u 50% 25u "Do something special"
Pop $mycheckbox
SetCtlColors $mycheckbox "" ${MUI_BGCOLOR}
${NSD_Check} $mycheckbox ; Check it by default
FunctionEnd
Function un.LeaveUnWelcome
${NSD_GetState} $mycheckbox [=12=]
MessageBox MB_OK "On Leave mycheckbox = $mycheckbox $\n $[=12=] = [=12=]"
${If} [=12=] <> 0
MessageBox mb_ok "I'm special"
${EndIf}
FunctionEnd
因此我无法验证复选框是否被选中。 我的代码有什么问题,我该如何解决?
我什至试过下面这样的东西
${NSD_Check} $mycheckbox ; Check it by default
${NSD_SetState} $mycheckbox ${BST_CHECKED}
我从Adding a checkbox to the NSIS Uninstaller Welcome Page
得到了上面的代码您的自定义函数引用了两个不同的页面。 ModifyUnWelcome 在创建 MUI_UNPAGE_WELCOME 页面时调用,LeaveUnWelcome - 当用户离开最后一个 MUI_UNPAGE_FINISH 页面时调用。 当您调用 ${NSD_GetState} 时,由 ModifyUnWelcome 句柄拥有的控件将被销毁。您应该将自定义函数定义放置在 附近 并且 在 引用页面声明之前。
!define MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ModifyUnWelcome
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.LeaveUnWelcome
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_INSTFILES
!define MUI_FINISHPAGE_TITLE_3LINES
!insertmacro MUI_UNPAGE_FINISH