|

|
1#
发表于 2008-8-21 12:37 AM
| 只看该作者
近来刚接触 NSIS,对它还不是非常熟悉。蓝色网际的 foobar.nsi 为我编程 foobar2000 安装程序提供绝好的蓝本。有一个问题就是蓝色网际 foobar2000 0.9 以后的汉化版中有两个自定义页面,其中一个就是“用户界面”。不知如何编写实现。困于所学有限,特向论坛寻求帮助,热盼高人帮我修改一下代码。
我写的编程代码:
!include "MUI.nsh"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_COMPONENTS
Page custom SetCustom LeaveCustom
!insertmacro MUI_PAGE_INSTFILES
ReserveFile ".\resource\ioB.ini"
ReserveFile ".\resource\ui1.bmp"
ReserveFile ".\resource\ui2.bmp"
Section "默认用户界面" foo_ui_std
SectionEnd
Section "分栏用户界面" foo_ui_columns
SectionEnd
Section "配置文件" ;设置为隐藏区段
ReadINIStr $0 "$PLUGINSDIR\ioB.ini" "Field 1" "State"
SetOutPath "$APPDATA\foobar2000"
ReadINIStr $0 "$PLUGINSDIR\ioB.ini" "Field 4" "State"
StrCmp $0 1 0 +2
File ".\resource\foocfg\CUI\foobar2000.cfg"
ReadINIStr $0 "$PLUGINSDIR\ioB.ini" "Field 5" "State"
StrCmp $0 1 0 +2
File ".\resource\foocfg\DUI\foobar2000.cfg"
WriteINIStr "$INSTDIR\installer.ini" foobar2000 foocfg 1
SectionEnd
Function .onInit
InitPluginsDir
File /oname=$PLUGINSDIR\ioB.ini ".\resource\ioB.ini" ; 释放 ioB.ini 文件
File /oname=$PLUGINSDIR\ui1.bmp ".\resource\ui1.bmp"
File /oname=$PLUGINSDIR\ui2.bmp ".\resource\ui2.bmp"
WriteINIStr "$PLUGINSDIR\ioB.ini" "Field 6" "Text" "$PLUGINSDIR\ui1.bmp"
FunctionEnd
Function .onSelChange
!define LR_LOADFROMFILE 0x0010
!define LR_CREATEDIBSECTION 0x2000
!macro ShowImage CTRL_ID IMG_NAME
Push $1
GetDlgItem $1 $HWND ${CTRL_ID}
System::Call 'user32::LoadImageA(i, t, i, i, i, i) i (0, s, 0, 0, 0, ${LR_CREATEDIBSECTION}|${LR_LOADFROMFILE})
.R1' "${IMG_NAME}"
SendMessage $1 370 0 $R1
System::Call "gdi32::DeleteObject(i) i (R1)"
Pop $1
!macroend
FunctionEnd
Function SetCustom
InstallOptions::initDialog /NOUNLOAD "$PLUGINSDIR\ioB.ini"
Pop $hwnd ; 获取自定义页面的窗口句柄
!insertmacro MUI_HEADER_TEXT "用户界面" "选择您想要的界面,然后正式开始安装写入进程。$_CLICK"
;如果没有选择配置文件则禁止选择初始界面
SectionGetFlags ${foocfg} $R0
StrCmp $R0 0 0 columns
GetDlgItem $R1 $HWND 1214
;SendMessage $R1 ${BM_SETCHECK} 0 0
EnableWindow $R1 0
GetDlgItem $R1 $HWND 1215
EnableWindow $R1 0
GetDlgItem $R1 $HWND 1216
EnableWindow $R1 0
GetDlgItem $R1 $HWND 1217
SendMessage $R1 ${WM_CLOSE} 0 0
Goto face_end
columns:
SectionGetFlags ${foo_ui_columns} $R0
StrCmp $R0 0 0 face_end
GetDlgItem $R1 $HWND 1215
EnableWindow $R1 0
face_end:
InstallOptions::show ; 显示自定义页面
Pop $0
FunctionEnd
Function LeaveCustom
ReadINIStr $0 "$PLUGINSDIR\ioB.ini" "Settings" "State" ; 读取那个控件正在使用 state 就是 Field 后面的序数
StrCmp $R0 0 validate
;StrCmp $R0 8 checkbox
StrCmp $R0 4 ui1
StrCmp $R0 5 ui2
Abort
ui1:
;默认用户界面
!insertmacro ShowImage 1217 $PLUGINSDIR\ui1.bmp
Abort
ui2:
;分栏用户界面
!insertmacro ShowImage 1217 $PLUGINSDIR\ui2.bmp
Abort
validate:
FunctionEnd
附图

当不选配置文件时,默认界面和分栏界面不可选。不知控件句柄获取公式如何设定,郁闷。
[ 本帖最后由 青衫一袭 于 2008-8-21 12:48 AM 编辑 ] |
附件: 您所在的用户组无法下载或查看附件
|