最新消息:

按钮设置皮肤插件SkinBtn

nsis 永恒心锁 4472浏览 0评论

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)

免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。丨本站为个人博客非盈利性站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途。丨本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权BY-NC-SA协议进行授权

转载请注明:永恒心锁-分享互联网 » 按钮设置皮肤插件SkinBtn

您必须 登录 才能发表评论!