1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 关于NSIS自定义界面初步讲解(一)

关于NSIS自定义界面初步讲解(一)

时间:2022-10-13 19:59:46

相关推荐

关于NSIS自定义界面初步讲解(一)

1、在开头申明Page custom WelcomePage,表示这个界面是自定义;

2、重写Function .onInit方法,包含初始化临时目录,以及释放资源等一系列需要初始化的事件;

3、重写Function onGUIInit 方法,隐藏相关的控件;

4、自定义页面的函数Function WelcomePage,里面定义控件,绑定事件处理;

以上步骤,就是对于相关内容的一个大体说明,当然,还有细节之类的需要特别注意,比如section段之类,相关语法等,这一块儿不做为特别的说明,在帮助文档里面都可以找到,以下代码是一个特别简单的自定义页面的实例,代码只是抽出来的一部分,重点说明的是自定义页面部分,并不能运行,请谅解!

Page custom WelcomePage

Function .onInit

InitPluginsDir

Call IsProgramRunning #检测程序是否正在运行

Call CompareVersion #检查程序的版本号

;显示动态的图片

File `/oname=$PLUGINSDIR\index.htm` `images\index.htm`

SkinBtn::Init "$PLUGINSDIR\btn_install.bmp"

FunctionEnd

;初始化的函数

Function onGUIInit

;消除边框

System::Call `user32::SetWindowLong(i$HWNDPARENT,i${GWL_STYLE},0x9480084C)i.R0`

;隐藏一些既有控件

GetDlgItem $0 $HWNDPARENT 1034

ShowWindow $0 ${SW_HIDE}

GetDlgItem $0 $HWNDPARENT 1035

ShowWindow $0 ${SW_HIDE}

GetDlgItem $0 $HWNDPARENT 1036

ShowWindow $0 ${SW_HIDE}

GetDlgItem $0 $HWNDPARENT 1037

ShowWindow $0 ${SW_HIDE}

GetDlgItem $0 $HWNDPARENT 1038

ShowWindow $0 ${SW_HIDE}

GetDlgItem $0 $HWNDPARENT 1039

ShowWindow $0 ${SW_HIDE}

GetDlgItem $0 $HWNDPARENT 1256

ShowWindow $0 ${SW_HIDE}

GetDlgItem $0 $HWNDPARENT 1028

ShowWindow $0 ${SW_HIDE}

FunctionEnd

;处理无边框移动

Function onGUICallback

${If} $MSG = ${WM_LBUTTONDOWN}

SendMessage $HWNDPARENT ${WM_NCLBUTTONDOWN} ${HTCAPTION} $0

${EndIf}

FunctionEnd

Function onWarningGUICallback

${If} $MSG = ${WM_LBUTTONDOWN}

SendMessage $WarningForm ${WM_NCLBUTTONDOWN} ${HTCAPTION} $0

${EndIf}

FunctionEnd

;关闭函数

Function SkinBtn_Close

SkinBtn::Set /IMGID=$PLUGINSDIR\btn_close.bmp $1

FunctionEnd

;安装的函数

Function SkinBtn_Install

SkinBtn::Set /IMGID=$PLUGINSDIR\btn_install.bmp $1

FunctionEnd

;自定义的欢迎页面 (如果此页面为空,则会调用原来的默认的页面)

Function WelcomePage

GetDlgItem $0 $HWNDPARENT 1

ShowWindow $0 ${SW_HIDE}

GetDlgItem $0 $HWNDPARENT 2

ShowWindow $0 ${SW_HIDE}

GetDlgItem $0 $HWNDPARENT 3

ShowWindow $0 ${SW_HIDE}

;初始化的定义一个窗口

nsDialogs::Create 1044

Pop $0

${If} $0 == error

Abort

${EndIf}

SetCtlColors $0 "" transparent ;背景设成透明

;加入头文件"nsWindows.nsh"

${NSW_SetWindowSize} $HWNDPARENT 508 296 ;改变窗体大小

${NSW_SetWindowSize} $0 508 296 ;改变Page大小

;关闭按钮

${NSD_CreateButton} 490 5 15 15 ""

Pop $Btn_Close

StrCpy $1 $Btn_Close

Call SkinBtn_Close

GetFunctionAddress $3 onClose

SkinBtn::onClick $1 $3

;立即安装的按钮

${NSD_CreateButton} 183 225 153 39 ""

Pop $Btn_Install

StrCpy $1 $Btn_Install

Call SkinBtn_Install

EnableWindow $Btn_Install 1

;定义的一个Bool值,用于是否显示

;StrCpy $Bool_Install 1

GetFunctionAddress $3 OnClick_Install

SkinBtn::onClick $1 $3

;右下方更改安装路径的控件使用

${NSD_CreateButton} 400 280 95 15 ""

Pop $Btn_LoadPath

StrCpy $1 $Btn_LoadPath

Call SkinBtn_Modify

GetFunctionAddress $3 OnClick_Modify

SkinBtn::onClick $1 $3

;StrCpy $Bool_License 0 ;初始化值为0

;CheckBox选中项

${NSD_CreateButton} 23 280 15 15 ""

Pop $Ck_AgreeLicense

StrCpy $1 $Ck_AgreeLicense

Call SkinBtn_Checked

GetFunctionAddress $3 OnClick_CheckAgreeLicense

SkinBtn::onClick $1 $3

StrCpy $Bool_AgreeLicense 1

${NSD_CreateLabel} 43 280 100 15 "我已阅读并同意"

Pop $Lbl_AgreeLicense

SetCtlColors $Lbl_AgreeLicense "" transparent ;背景设成透明

;checkBox按钮右侧的许可协议按钮,点击这个按钮可以打开html连接,显示网页的效果

${NSD_CreateButton} 130 280 100 15 ""

Pop $Btn_LoadPath

StrCpy $1 $Btn_LoadPath

Call SkinBtn_HtmlLicense

GetFunctionAddress $3 onClickHtmlLicense

SkinBtn::onClick $1 $3

;界面的上方图片

${NSD_CreateBitmap} 0 0 520 230 ""

Pop $TopImage

${NSD_SetImage} $TopImage $PLUGINSDIR\welcome.bmp $ImageHandle

;贴背景大图

${NSD_CreateBitmap} 0 0 100% 100% ""

Pop $BGImage

;${NSD_SetImage} $BGImage $PLUGINSDIR\bg.bmp $ImageHandle

${NSD_SetImage} $BGImage $PLUGINSDIR\bg.bmp $ImageHandle

GetFunctionAddress $0 onGUICallback

WndProc::onCallback $BGImage $0 ;处理无边框窗体移动

nsDialogs::Show

${NSD_FreeImage} $ImageHandle

;当加上以下的代码后,背景图片以及界面的上方图片显示出来

GetFunctionAddress $0 onGUICallback

WndProc::onCallback $BGImage $0 ;处理无边框窗体移动

nsDialogs::Show

;释放背景图片的语句

{NSD_FreeImage} $ImageHandle

FunctionEnd

如果想获取更多内容,请关注本人微信公众号:

公众号二维码:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。