關於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

如果想獲取更多內容,請關注本人微信公衆號:

公衆號二維碼:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章