简体   繁体   English

如何在自定义对话框中自定义NSIS复选框?

[英]How to customize NSIS checkbox in custom dialog?

How to customize NSIS checkbox in custom dialog using plugin or bitmap image? 如何使用插件或位图图像在自定义对话框中自定义NSIS复选框?

Here is an example of NSIS installer with custom chechboxes 这是带有自定义复选框NSIS安装程序的示例 在此处输入图片说明

The current checkboxes working in options dialog only. 当前复选框仅在选项对话框中起作用。 Maybe there's a way to do this by using OnClick event? 也许有一种方法可以通过使用OnClick事件来做到这一点?

Any idea? 任何想法?

Thanks. 谢谢。

This is not a native NSIS feature but it can be implemented with some custom code: 这不是NSIS的本机功能,但可以使用一些自定义代码来实现:

!include WinMessages.nsh
!include nsDialogs.nsh ; WS_*
ShowInstDetails nevershow

Var Task1
Var Task2

Page InstFiles "" InitTasks FreeTasks

!macro SetTaskIcon hwnd icon
SetDetailsPrint none
Push $0
!if "${icon}" != ""
    File "/oname=$PluginsDir\Task${hwnd}.ico" "${icon}"
    System::Call 'USER32::LoadImage(i 0, t "$PluginsDir\Task${hwnd}.ico", i ${IMAGE_ICON}, i 32, i 32, i ${LR_LOADFROMFILE})i.r0'
    SendMessage ${hwnd} ${STM_SETICON} $0 0 $0
!else
    SendMessage ${hwnd} ${STM_GETICON} 0 0 $0
!endif
System::Call 'USER32::DestroyIcon(i $0)'
Pop $0
SetDetailsPrint lastused
!macroend
!macro FreeTask hwnd 
!insertmacro SetTaskIcon ${hwnd} ""
!macroend

!macro CreateTask outvar icon text x y
System::Store S
FindWindow $1 "#32770" "" $HWNDPARENT
System::Call 'USER32::CreateWindowEx(i 0, t "Static", t "${text}", i ${WS_CHILD}|${WS_VISIBLE}|${SS_ICON}|${SS_REALSIZEIMAGE}, i ${x}, i ${y}, i 32, i 32, i r1, i 0, i 0, i 0)i.r0'
StrCpy ${outvar} $0
!insertmacro SetTaskIcon ${outvar} "${icon}"
IntOp $2 ${x} + 32
IntOp $2 $2 + 5 ; Padding
System::Call 'USER32::CreateWindowEx(i 0, t "Static", t "${text}", i ${WS_CHILD}|${WS_VISIBLE}|${SS_CENTERIMAGE}, i $2, i ${y}, i 999, i 32, i r1, i 0, i 0, i 0)i.r0'
SendMessage $1 ${WM_GETFONT} 0 0 $2
SendMessage $0 ${WM_SETFONT} $2 1
System::Store L
!macroend

Function InitTasks
!insertmacro CreateTask $Task1 "${NSISDIR}\Contrib\Graphics\Icons\llama-grey.ico" "Foo" 40 50
!insertmacro CreateTask $Task2 "${NSISDIR}\Contrib\Graphics\Icons\llama-grey.ico" "Bar" 40 90
FunctionEnd

Function FreeTasks
!insertmacro FreeTask $Task1
!insertmacro FreeTask $Task2
FunctionEnd

Section "Foo task"
Sleep 2222 ; Pretend to do some work
!insertmacro SetTaskIcon $Task1 "${NSISDIR}\Contrib\Graphics\Icons\llama-blue.ico"
SectionEnd

Section "Bar task"
Sleep 3333 ; Pretend to do some work
!insertmacro SetTaskIcon $Task2 "${NSISDIR}\Contrib\Graphics\Icons\llama-blue.ico"
SectionEnd

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM