2012-09-27 61 views
0

如何在NSIS安装程序的安装文件页面中更改加载栏的颜色?在NSIS安装程序中更改加载栏颜色

以下尝试将消息PBM_SETBARCOLOR发送到加载栏窗口,但加载栏的颜色不会更改?

!include MUI2.nsh 
!include WinMessages.nsh 

InstallDir "abc" 
Name  "def"   
OutFile  "def.exe" 

!define MUI_PAGE_CUSTOMFUNCTION_SHOW InstFilesPageShow 
!insertmacro MUI_PAGE_INSTFILES 

!macro RefreshWindow HWND IDC 
    GetDlgItem $R0 ${HWND} ${IDC} 
    ShowWindow $R0 ${SW_HIDE} 
    ShowWindow $R0 ${SW_SHOW} 
!macroend 

Function InstFilesPageShow 

    SendMessage 1004 ${PBM_SETBARCOLOR} 0 "COLORREF(0,200,200)" #0xFF0000 
    System::Call `user32::SendMessage(i R1, i ${PBM_SETBARCOLOR}, i 0, i COLORREF(0,0,0))` #System::Call `user32::SetWindowPos(i R8, i ${HWND_TOP}, i 0, i 0, i ${w}, i ${h}, i ${SWP_NOMOVE})` 
    #!insertmacro RefreshWindow $HWND 1004 
    #!insertmacro RefreshWindow $mui.InstallPage 1004 
    !insertmacro RefreshWindow $HWNDPARENT 1004 

FunctionEnd 

Section "Dummy" 
    DetailPrint "Test" 
SectionEnd 
+0

COLORREF是一个Win32类型,而不是宏/功能... – Anders

回答

1
XPStyle on 
Page instfiles "" instfilesShow 

!include WinMessages.nsh 

Function instfilesShow 
FindWindow $0 "#32770" "" $HWNDPARENT 
GetDlgItem $0 $0 1004 
System::Call UxTheme::SetWindowTheme(ir0,w"",w"") 
SendMessage $0 ${PBM_SETBARCOLOR} 0 0x11aaee 
FunctionEnd 
0

恐怕你不会是能够做到这一点:在PBM_SETBARCOLOR documentation,MSDN指出

当启用视觉样式,这条消息没有任何影响。

顺便说一句,在您的RefreshWindow宏中,您错误地从其ID中获取控制句柄。 NSIS文档告诉

如果要获取内部对话框上控件的句柄,请首先使用FindWindow user_var(output) "#32770" "" $HWNDPARENT来获取内部对话框的句柄。

因此,你可以这样写:

FindWindow $R1 "#32770" "" $HWNDPARENT ;$R1 = handle of the inner dialog 
GetDlgItem $R0 $R1 ${IDC} ;get the handle of control from its ID 
ShowWindow $R0 ${SW_HIDE} 
ShowWindow $R0 ${SW_SHOW}