NSIS许可页面上的两个复选框

时间:2012-03-12 16:28:55

标签: nsis

我正在尝试做的事情here,但由于语法的复杂性和时间的不足,我需要有人来帮助我。

我花了几个小时尝试显示两个复选框而不是一个,但我一直都失败了。 NSIS语法正在扼杀我,我似乎无法将第二个USER32::CreateWindowEx权限的第二个{1}。我想显示第一个复选框下方(或右侧)的第二个复选框。

到目前为止,我已经做了以下修改,但这似乎没有创建第二个复选框(请参阅其余代码的原始帖子)。

; ---<snip>---
System::Call 'USER32::CreateWindowEx(i0,t "Button",t "Some option",i ${__NSD_CheckBox_STYLE},ir6,ir7,ir8,ir9,ir0,i666,i0,i0)i.r2'
System::Call 'USER32::CreateWindowEx(i0,t "Button",t "Second option",i ${__NSD_CheckBox_STYLE},ir6+100,ir7,ir8,ir9,ir0,i667,i0,i0)i.r3'
SendMessage $0 ${WM_GETFONT} 0 0 $0
SendMessage $2 ${WM_SETFONT} $0 1
SendMessage $3 ${WM_SETFONT} $0 1
${NSD_SetState} $2 1 ;check it
${NSD_SetState} $3 1 ;check it
FunctionEnd

Function licleave
FindWindow $5 "#32770" "" $HWNDPARENT
GetDlgItem $0 $5 666
GetDlgItem $1 $5 667
${NSD_GetState} $0 $0
${NSD_GetState} $1 $1
MessageBox mb_ok "Checkbox=$0 $1"
FunctionEnd

1 个答案:

答案 0 :(得分:1)

你不能在系统::调用ir6+100中进行数学运算(你只能使用简单的数字),在创建第二个复选框之前尝试IntOp $6 $6 + 100

编辑:

另一个答案的代码也给了复选框与对话框相同的宽度,因此添加到其右侧的任何其他控件都会出现在它后面。

您还必须调整第一个复选框的大小:

...
IntOp $8 $8 / 2 ; Use half the width
System::Call 'USER32::CreateWindowEx(i0,t "Button",t "Some option",i ${__NSD_CheckBox_STYLE},ir6,ir7,ir8,ir9,ir0,i666,i0,i0)i.r2'
IntOp $6 $6 + $8 ; Offset 2nd checkbox by the width of the first
System::Call 'USER32::CreateWindowEx(i0,t "Button",t "Other option",i ${__NSD_CheckBox_STYLE},ir6,ir7,ir8,ir9,ir0,i667,i0,i0)i.r3'
...