1. 必须先在.onInit或.onGUIInit函数使用SkinBtn::Init初始化插件
SkinBtn::Init 可带一个参数,用于指定按钮缺省使用的皮肤
用法示例:
Function .onInit
InitPluginsDir
File /oname=$PLUGINSDIRbutton.bmp button.bmp
SkinBtn::Init "$PLUGINSDIRbutton.bmp"
FunctionEnd
2. 使用SkinBtn::Set给指定按钮应用皮肤:
SkinBtn::Set [/IMGID=皮肤位图] 按钮句柄
/IMGID=皮肤位图 为可选项,若不指定,则使用SkinBtn::Init所指定的皮肤位图
皮肤位图可以指定为#位图资源ID(可使用!packhdr和ResHacker添加位图资源)
当然,也可以指定为位图文件的完整路径,例如:
SkinBtn::Set /IMGID=$PLUGINSDIRbutton.bmp $0
按钮文字颜色可用SetCtlColors更改
用法示例:
Function .onGUIInit
${For} $1 1 3
GetDlgItem $0 $HWNDPARENT $1
SetCtlColors $0 0x0C4E7C transparent
SkinBtn::Set $0
${Next}
FunctionEnd
3. 使用SkinBtn::onClick给按钮添加点击事件
SkinBtn::onClick 按钮句柄 回调函数地址
使用 GetFunctionAddress 获取期望的回调函数地址。
示例
例子详见:ExamplesSkinBtn.nsi
SetCompressor lzma
!ifdef NSIS_UNICODE
!define SKINBTNDIR "..PluginsUnicode"
!else
!define SKINBTNDIR "..Plugins"
!endif
!addplugindir "${SKINBTNDIR}"
!Include "MUI.nsh"
!define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit
;!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "${__FILE__}"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW DirPageShow
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_PAGE_CUSTOMFUNCTION_SHOW InstPageShow
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "SimpChinese"
Name "SkinBtn"
OutFile "SkinBtn.exe"
Caption "NSIS按钮皮肤插件"
InstallDir "$PROGRAMFILESNSIS"
LicenseForceSelection checkbox
Section
SectionEnd
Function .onInit
InitPluginsDir
File /oname=$PLUGINSDIRbutton1.bmp button1.bmp
File /oname=$PLUGINSDIRbutton2.bmp button2.bmp
SkinBtn::Init "$PLUGINSDIRbutton1.bmp"
FunctionEnd
Function onGUIInit
${For} $1 1 3
GetDlgItem $0 $HWNDPARENT $1
SetCtlColors $0 0x0C4E7C transparent
SkinBtn::Set $0
${Next}
FunctionEnd
Function onBack
MessageBox MB_ICONINFORMATION|MB_YESNO "你确实要返回前一个页面吗?" IDYES +2
Abort
SkinBtn::onClick $R0 0 ;取消对上一步按钮点击事件的处理
FunctionEnd
Function SkinBtn
FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $0 $0 $1
SkinBtn::Set /IMGID=$PLUGINSDIRbutton2.bmp $0
FunctionEnd
Function DirPageShow
StrCpy $1 1001
Call SkinBtn
GetDlgItem $R0 $HWNDPARENT 3
GetFunctionAddress $0 onBack
SkinBtn::onClick $R0 $0
FunctionEnd
Function InstPageShow
StrCpy $1 1027
Call SkinBtn
FunctionEnd
备注
皮肤位图要求说明:
位图必须包含5种状态图像:Normal、MouseOver、Pushed、Disabled、Focus
位图宽度和高度都没限制,但最好要适合按钮大小,并且高度必须是5的倍数
按钮贴图是用系统API函数TransparentBlt实现的,透明色为粉色(0xFF00FF)
暂无评论内容