NSIS自定义控件创建
1.创建一个属于自己Design的Button
;下一步
${NSD_CreateButton} 152 270 230 40
Pop $btn_QuickInstall
SkinBtn::Set /IMGID=$PLUGINSDIR\btn_quickinstall.bmp $btn_QuickInstall
GetFunctionAddress $3 OnBtn_QuickInstall;这里Function定义自己事件处理
SkinBtn::onClick $btn_QuickInstall $3
SetCtlColors $btn_QuickInstall “ffffff” transparent ;设置颜色
CreateFont $1 "$(Page_FONT)" "12" "700" ;设置字体
SendMessage $btn_QuickInstall ${WM_SETFONT} $1 1
${NSD_SetFocus} $btn_QuickInstall
;SkinBtn是一个第三方插件,国人开发,支持Button的五种状态:Normal,Hover,Click,Disabled,Focus,正常、鼠标悬浮、单击时、不可用时、获得焦点时五种状态。要注意的就是SkinBtn的五种状态图需要竖行排列,宽高没有限制,但是高度像素最好为5的倍数,下面贴一张示例Button的贴图:
类似的控件还有:${NSD_CreateCheckBox}、${NSD_CreateLabel}、${NSD_CreateHLine} 、${NSD_CreateVLine} 、${NSD_CreateLabel} 、${NSD_CreateIcon} 、${NSD_CreateBitmap} 、${NSD_CreateBrowseButton} 、${NSD_CreateLink} 、${NSD_CreateButton} 、${NSD_CreateGroupBox} 、${NSD_CreateCheckBox} 、${NSD_CreateRadioButton} 、${NSD_CreateText} 、${NSD_CreatePassword} 、${NSD_CreateNumber} 、${NSD_CreateFileRequest} 、${NSD_CreateDirRequest} 、${NSD_CreateComboBox} 、${NSD_CreateDropList} 、${NSD_CreateListBox}
这里就不展示了,感兴趣的可以尝试下。
创建显示License内容的控件
关于License的框如何显示的问题,NSIS的默认窗体有一个专门的协议Page,不过在我们的自定义Page中就不说那个了,在我们的Welcome页面中加入一个协议显示的窗口,这时候需要准备一个协议按钮的贴图,协议窗口。
协议的按钮样子看上去是超链接,我们可以通过Button贴图去实现。图片预载入跟贴图的步骤可以参考本篇和图片初始化篇(点击查看)。
在做License之前首先要准备一份License的文件,NSIS命令中有读取文件,显示文件内容的命令,该文件可以是Txt,也可以是带有格式的RTF,这里示例中选用RTF文件。而用于显示RTF的控件则是nsDialogs插件提供的RichEdit20A,还要注意引入头文件LoadRTF.nsh。
;读取RTF的文本框
nsDialogs::CreateControl "RichEdit20A" \
${ES_READONLY}|${WS_VISIBLE}|${WS_CHILD}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN} \
${WS_EX_STATICEDGE} 1 32 528 255 ''
Pop $Txt_License
${LoadRTF} '$PLUGINSDIR\license.rtf' $Txt_License
这样一个,协议的显示控件就创建完毕了。