2012-05-29 52 views
3

編輯:我找到了解決辦法見製作MUI2歡迎頁面標籤具有透明背景

我試圖使MUI2歡迎頁面文本有一個透明背景下的文本。

我可以讓文本具有MUI1的透明背景,但不適用於MUI2(標籤窗口保留其白色背景)。 你也會建議我只使用MUI1或MUI2好得多使用?

你能幫我讓標籤具有MUI2歡迎頁面的透明背景嗎?

相關代碼(請參見下面的所有,你可以編譯成看到錯誤代碼):

!define MUI_PAGE_CUSTOMFUNCTION_SHOW WelcomePageShow 
!insertmacro MUI_PAGE_WELCOME 
Function WelcomePageShow 
    # Why does the following code make the labels background transparent in MUI 
    # but NOT in MUI2??? 
    # What do I need to do to make it transparent in MUI2?? 

    ; Set transparent backgrounds. 
    SetCtlColors $MUI_HWND 0xFFFFFF transparent 
    !insertmacro SetTransparent $MUI_HWND 1201 # These aren't transparent in MUI2 
    !insertmacro SetTransparent $MUI_HWND 1202 # These aren't transparent in MUI2 

    # Make main white background a different colour 
    GetDlgItem $R0 ${MUI_HWND} 1044 
    SetCtlColors $R0 0x444444 0xff0000   # The background colour doesn't change in MUI2 
    # Make smaller white background a different colour 
    GetDlgItem $R0 ${MUI_HWND} 1018 
    SetCtlColors $R0 0x444444 0x00ff00   # The background colour doesn't change in MUI2 
    Call RefreshParentControls 
FunctionEnd 

全部代碼:

!include MUI2.nsh # change this to !include MUI.nsh to see how the code works successfully for MUI1 
!include WinMessages.nsh 
!include "LogicLib.nsh" 

; Local bitmap path. 
!define BITMAP_FILE test2.bmp 

; -------------------------------------------------------------------------------------------------- 
; Installer Settings 
; -------------------------------------------------------------------------------------------------- 
Name "Background Bitmap" 
OutFile "bgbitmap.exe" 
ShowInstDetails show 

; -------------------------------------------------------------------------------------------------- 
; Modern UI Settings 
; -------------------------------------------------------------------------------------------------- 
!define MUI_COMPONENTSPAGE_NODESC 
!define MUI_FINISHPAGE_NOAUTOCLOSE 
!define MUI_CUSTOMFUNCTION_GUIINIT MyGUIInit 

; -------------------------------------------------------------------------------------------------- 
; Definitions 
; -------------------------------------------------------------------------------------------------- 
!ifndef LR_LOADFROMFILE 
    !define LR_LOADFROMFILE  0x0010 
!endif 
!ifndef LR_CREATEDIBSECTION 
    !define LR_CREATEDIBSECTION 0x2000 
!endif 
!ifndef IMAGE_BITMAP 
    !define IMAGE_BITMAP  0 
!endif 
!ifndef SS_BITMAP 
    !define SS_BITMAP   0x0000000E 
!endif 
!ifndef WS_CHILD 
    !define WS_CHILD   0x40000000 
!endif 
!ifndef WS_VISIBLE 
    !define WS_VISIBLE   0x10000000 
!endif 
!define HWND_TOP   0 
!define SWP_NOSIZE   0x0001 
!define SWP_NOMOVE   0x0002 
!define IDC_BITMAP   1500 
!define stRECT "(i, i, i, i) i" 
Var hBitmap 

; -------------------------------------------------------------------------------------------------- 
; Pages 
; -------------------------------------------------------------------------------------------------- 
!define MUI_PAGE_CUSTOMFUNCTION_SHOW WelcomePageShow 
!insertmacro MUI_PAGE_WELCOME 

!insertmacro MUI_LANGUAGE English 

; -------------------------------------------------------------------------------------------------- 
; Macros 
; -------------------------------------------------------------------------------------------------- 
; Destroy a window. 
!macro DestroyWindow HWND IDC 
    GetDlgItem $R0 ${HWND} ${IDC} 
    System::Call `user32::DestroyWindow(i R0)` 
!macroend 

; Give window transparent background. 
!macro SetTransparent HWND IDC 
    GetDlgItem $R0 ${HWND} ${IDC} 
    SetCtlColors $R0 0x444444 transparent 
!macroend 

; Refresh window. 
!macro RefreshWindow HWND IDC 
    GetDlgItem $R0 ${HWND} ${IDC} 
    ShowWindow $R0 ${SW_HIDE} 
    ShowWindow $R0 ${SW_SHOW} 
!macroend 

; -------------------------------------------------------------------------------------------------- 
; Functions 
; -------------------------------------------------------------------------------------------------- 
Function MyGUIInit 

    ; Extract bitmap image. 
    InitPluginsDir 
    ReserveFile `${BITMAP_FILE}` 
    File `/ONAME=$PLUGINSDIR\bg.bmp` `${BITMAP_FILE}` 

    ; Get the size of the window. 
    System::Call `*${stRECT} .R0` 
    System::Call `user32::GetClientRect(i $HWNDPARENT, i R0)` 
    System::Call `*$R0${stRECT} (, , .R1, .R2)` 
    System::Free $R0 

    ; Create bitmap control. 
    System::Call `kernel32::GetModuleHandle(i 0) i.R3` 
    System::Call `user32::CreateWindowEx(i 0, t "STATIC", t "", i ${SS_BITMAP}|${WS_CHILD}|${WS_VISIBLE}, i 0, i 0, i R1, i R2, i $HWNDPARENT, i ${IDC_BITMAP}, i R3, i 0) i.R1` 
    System::Call `user32::SetWindowPos(i R1, i ${HWND_TOP}, i 0, i 0, i 0, i 0, i ${SWP_NOSIZE}|${SWP_NOMOVE})` 

    ; Set the bitmap. 
    System::Call `user32::LoadImage(i 0, t "$PLUGINSDIR\bg.bmp", i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_CREATEDIBSECTION}|${LR_LOADFROMFILE}) i.s` 
    Pop $hBitmap 
    SendMessage $R1 ${STM_SETIMAGE} ${IMAGE_BITMAP} $hBitmap 

    ; Set transparent backgrounds. 
    !insertmacro SetTransparent $HWNDPARENT 3 
    !insertmacro SetTransparent $HWNDPARENT 1 
    !insertmacro SetTransparent $HWNDPARENT 2 
    !insertmacro SetTransparent $HWNDPARENT 1034 
    !insertmacro SetTransparent $HWNDPARENT 1037 
    !insertmacro SetTransparent $HWNDPARENT 1038 

    ; Remove unwanted controls. 
    !insertmacro DestroyWindow $HWNDPARENT 1256 
    !insertmacro DestroyWindow $HWNDPARENT 1028 
    !insertmacro DestroyWindow $HWNDPARENT 1039 

FunctionEnd 

Function RefreshParentControls 

    !insertmacro RefreshWindow $HWNDPARENT 1037 
    !insertmacro RefreshWindow $HWNDPARENT 1038 

FunctionEnd 

Function WelcomePageShow 

    # Why does the following code make the labels background transparent in MUI 
    # but NOT in MUI2??? 
    # What do I need to do to make it transparent in MUI2?? 

    ; Set transparent backgrounds. 
    SetCtlColors $MUI_HWND 0xFFFFFF transparent 
    !insertmacro SetTransparent $MUI_HWND 1201 # These aren't transparent in MUI2 
    !insertmacro SetTransparent $MUI_HWND 1202 # These aren't transparent in MUI2 

    # Make main white background a different colour 
    GetDlgItem $R0 ${MUI_HWND} 1044 
    SetCtlColors $R0 0x444444 0xff0000   # The background colour doesn't change in MUI2 
    # Make smaller white background a different colour 
    GetDlgItem $R0 ${MUI_HWND} 1018 
    SetCtlColors $R0 0x444444 0x00ff00   # The background colour doesn't change in MUI2 
    Call RefreshParentControls 
FunctionEnd 

; Free loaded resources. 
Function .onGUIEnd 

    ; Destroy the bitmap. 
    System::Call `gdi32::DeleteObject(i s)` $hBitmap 

FunctionEnd 

; -------------------------------------------------------------------------------------------------- 
; Dummy section 
; -------------------------------------------------------------------------------------------------- 
Section "Dummy Section" 
SectionEnd 

解決方案:

Function WelcomePageShow 
      # Sets background image 
     System::Call `user32::LoadImage(i 0, t "$PLUGINSDIR\wb.bmp", i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_CREATEDIBSECTION}|${LR_LOADFROMFILE}) i.s` 
     Pop $hBitmap 
     SendMessage $bitmapWindow ${STM_SETIMAGE} ${IMAGE_BITMAP} $hBitmap 

      # Start solution 
     SetCtlColors $mui.WelcomePage ${CTRL_COLOUR} transparent 
     SetCtlColors $mui.WelcomePage.text ${CTRL_COLOUR} transparent 
     SetCtlColors $mui.WelcomePage.title 0x333333 transparent 

     !insertmacro DestroyWindow $HWNDPARENT 1037 
     !insertmacro DestroyWindow $HWNDPARENT 1038 
     !insertmacro DestroyWindow $HWNDPARENT 1036 
     System::Call `user32::DestroyWindow(i $mui.WelcomePage.Image)` 
     Call RefreshParentControls 
    FunctionEnd 
+0

您應該已將解決方案作爲答案發布,並自行選擇。因此它不會被列爲未答覆的問題。 – Seki

回答

0

解決方案:

Function WelcomePageShow 
     # Sets background image 
    System::Call `user32::LoadImage(i 0, t "$PLUGINSDIR\wb.bmp", i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_CREATEDIBSECTION}|${LR_LOADFROMFILE}) i.s` 
    Pop $hBitmap 
    SendMessage $bitmapWindow ${STM_SETIMAGE} ${IMAGE_BITMAP} $hBitmap 

     # Start solution 
    SetCtlColors $mui.WelcomePage ${CTRL_COLOUR} transparent 
    SetCtlColors $mui.WelcomePage.text ${CTRL_COLOUR} transparent 
    SetCtlColors $mui.WelcomePage.title 0x333333 transparent 

    !insertmacro DestroyWindow $HWNDPARENT 1037 
    !insertmacro DestroyWindow $HWNDPARENT 1038 
    !insertmacro DestroyWindow $HWNDPARENT 1036 
    System::Call `user32::DestroyWindow(i $mui.WelcomePage.Image)` 
    Call RefreshParentControls 
FunctionEnd