NSIS图形界面(使用nsiskin插件)进阶教程
来源:互联网 发布:机器人编程指令 编辑:程序博客网 时间:2024/05/16 18:32
免费制作基于nsiskin的安装包,加qq群:37586365
写在系列教程的最开头,感谢烂菜大牛,他写了个系列教程(NSIS进阶教程)是本系列教程的基础
本系列教程和烂菜大牛的系列教程异同如下:
1.本教程使用的图片资源来源于烂菜大牛的教程
2.插件使用,本系列教程只使用nsiskin一个插件,而烂菜大牛使用了nswindows,wndproc,skinbtn,skinprogress等插件
3.复选框(checkbox),本教程直接实现复选框,烂菜大牛的教程用的是skinbtn+label来模拟复选框
烂菜大牛的教程写的真的很好,推荐大家看本教程之前先百度搜索看一下烂菜大牛的教程,相比之下,我还是新手,如有错误,大家多批评指正
在开始之前,我们来看一下nsiskin插件能做出什么样的效果
好了,参照烂菜大牛教程的形式,我们开始吧
教程第一步,我们来看看如何实现无边框窗口及移动,并贴上一张背景图
再使用nsiskin插件之前,首先要初始化插件,代码如下
GetFunctionAddress $R0 onImageCallback
GetFunctionAddress $R1 onButtonClick
nsiskin::Init /NOUNLOAD $R0 $R1 34
onImageCallback,图片回调函数,返回绘图所需要的图片
返回的图片由如下代码创建
nsiskin::LoadImg /NOUNLOAD "$PLUGINSDIR\bg.bmp"
Pop $BGImage
onButtonClick,按钮按下回掉函数,当按钮被按下,通过此回调函数通知脚本
有了以上知识作基础,我们来看一下欢迎页面的关键代码
nsDialogs::Create 1044
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
SetCtlColors $Dialog "" transparent ;背景设成透明
${SetWindowSize} $Dialog 513 354 ;改变Page大小
${NSD_CreateBitmap} 0 34 100% 100% ""
Pop $0
${NSD_SetImage} $0 $PLUGINSDIR\middle.bmp $1
nsiskin::Attach /NOUNLOAD $Dialog
nsDialogs::Show
${NSD_FreeImage} $1
FunctionEnd
Pop $0
${If} $0 = $Dialog
push $BGImage
${EndIf}
FunctionEnd
FunctionEnd
Pop $AgreeBtn
StrCpy $BoolAgree 1
SendMessage $AgreeBtn ${WM_SETFONT} $Font 0
Pop $0
${If} $0 = $NextBtn
call onClickNext
${ElseIf} $0 = $AgreeBtn
call onClickAgree
${ElseIf} $0 = $Agree1Btn
call onClickAgree1
${EndIf}
FunctionEnd
${If} $BoolAgree == '1'
StrCpy $BoolAgree 0
${Else}
StrCpy $BoolAgree 1
${EndIf}
FunctionEnd
Pop $0
${If} $0 = $Dialog
push $BGImage
${ElseIf} $0 = $CloseBtn
push $CloseImg
${ElseIf} $0 = $NextBtn
push $NextImg
${ElseIf} $0 = $InstallBtn
push $NextImg
${ElseIf} $0 = $PathEdt
push $EditImg
${ElseIf} $0 = $PathBtn
push $ChangeImg
${ElseIf} $0 = $AgreeBtn
push '5'
${If} $BoolAgree == '1'
push $CheckImg2
${Else}
push $CheckImg1
${EndIf}
push '5'
${If} $BoolAgree1 == '1'
push $CheckImg2
${Else}
push $CheckImg1
${EndIf}
${EndIf}
FunctionEnd
nsiskin::CreateWindow /NOUNLOAD $HWNDPARENT 0 0 349 184 "提示"
pop $MsgBox
nsiskin::CreateButton /NOUNLOAD $MsgBox 325 8 15 15 "" 2
Pop $Close1Btn
;System::Call 'User32::CreateWindowEx(i0,t"STATIC", i0, i0x5000000d,i50,i50,i40,i40,i$MsgBox,i1130,i0,i0)i.R1'
System::Call 'User32::CreateWindowEx(i0,t"STATIC", t"quit confirm?", i0x5000000d,i120,i60,i100,i17,i$MsgBox,i1130,i0,i0)i.R1'
pop $QuitBtn
nsiskin::CreateButton /NOUNLOAD $MsgBox 200 120 88 25 "no" 2
pop $CancelBtn
ShowWindow $MsgBox ${SW_SHOW}
FunctionEnd
GetFunctionAddress $0 NSD_TimerFun
nsDialogs::CreateTimer $0 500
Pop $CloseBtn
Pop $Progress
;SetCtlColors $Progress "" transparent ;背景设成透明
${NSD_AddStyle} $Progress ${SS_OWNERDRAW}
${If} $Percent != 100
IntOp $Percent $Percent + 10
System::Call 'User32::InvalidateRect(i$Progress, i0, i1)i.R9'
${Else}
GetFunctionAddress $0 NSD_TimerFun
nsDialogs::KillTimer $0
${EndIf}
FunctionEnd
IntCmp $R9 0 0 Move Move
StrCmp $R9 "X" 0 Move
StrCpy $R9 "120"
Move:
SendMessage $HWNDPARENT "0x408" "$R9" ""
FunctionEnd
StrCpy $R9 1
Call RelGotoPage
Abort
FunctionEnd
ps:脚本需要Unicode版nsis编译,推荐2.46.5版本
- NSIS图形界面(使用nsiskin插件)进阶教程
- NSIS进阶教程(三)
- NSIS进阶教程(一)
- NSIS进阶教程(二)
- NSIS进阶教程(三)
- NSIS进阶教程(四)
- NSIS进阶教程(五)
- NSIS进阶教程(一)~(五)
- NSIS进阶教程(一)~(五)
- NSIS进阶教程(一)~(五)
- NSIS使用教程
- NSIS进阶教程(一)~(五)
- NSIS学习笔记(二)-使用C++开发NSIS插件
- NSIS进阶教程--制作仿酷狗安装包 ( 转 )
- 发布Qt应用程序(NSIS使用教程)
- NSIS使用
- WTK进阶使用教程
- NSIS DerectUI 皮肤插件 免费使用!!支持异性,动画!!
- 开发:Mac 安装 Mysql数据库
- jQuery easyUI相关消息窗口
- 58. SaveVolley
- 通过python threading Thread理解多线程和单线程的运行机制
- ThinkPHP之唯一建冲突数据自增
- NSIS图形界面(使用nsiskin插件)进阶教程
- google迈向IoT的开端——推出Android Things操作系统
- 类似购物评价,点击五角星变色事件
- Java面试题大全(part_4)
- Java中的ReentrantLock和synchronized两种锁定机制的对比
- PostgreSQL学习篇10.1 模式
- Ubuntu命令行启动Matlab
- ubuntu中安装systemstap缺少dbg文件
- 串口接收处理思路