Hallo,
ich habe da so eine schöne Form mit PNG Hintergrund und so. Ich möchte nun ein Label drauf benutzen.
Funktioniert so erst mal ja garnicht, nech
Dann habe ich einfach eine neue Form gemacht und dies als Child gesetzt und dem Child habe ich das Label gebene und dies funktioniert wunderbar.
Nun das Problem. Ich sehe ein häsligen grauen Kasten als Hintergrund vom Label.
Wie bekomme ich nun den Hintergrund vom Child/Label weg?
Spoiler anzeigen
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <StaticConstants.au3>
#include <GDIPlus.au3>
#include <IE.au3>
#include <Array.au3>
Global $iImagePfad = @ScriptDir & "\Bilder\"
[/autoit] [autoit][/autoit] [autoit];~ Global Const $IMAGE_BITMAP = 0
Global Const $SC_DRAGMOVE = 0xF012
Global Const $STM_SETIMAGE = 0x0172
;~ Global Const $LWA_ALPHA = 0x00000002
Global $hWnd, $oIE, $hBmp, $hImage, $hBrush, $iWidth, $iHeight, $hbrOld, $iButtonHover
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hImage = _GDIPlus_ImageLoadFromFile($iImagePfad & "background.png")
[/autoit] [autoit][/autoit] [autoit]$iWidth = _GDIPlus_ImageGetWidth($hImage)
$iHeight = _GDIPlus_ImageGetHeight($hImage)
$hBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
[/autoit] [autoit][/autoit] [autoit]; Create the main window
$hWnd = GUICreate("Test", $iWidth, $iHeight, -1, -1, BitOR($WS_POPUP, $WS_CLIPCHILDREN), BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")
$iLabel = _GuiCreateLabel ($hWnd, "test", 10,10,100,20)
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $hWnd)
[/autoit] [autoit][/autoit] [autoit]SetTransparentBitmap($hWnd, $hImage)
[/autoit] [autoit][/autoit] [autoit]_WinAPI_DeleteObject($hBmp)
_GDIPlus_ImageDispose($hImage)
; Message loop
While (True)
Switch (GUIGetMsg())
Case $GUI_EVENT_CLOSE
GUIDelete($hWnd)
ExitLoop
EndSwitch
WEnd
_WinAPI_DeleteObject($hBrush)
_GDIPlus_Shutdown()
Func _GuiCreateLabel ($iHwnd, $iText, $iX, $iY, $iW, $iH)
GUICreate ("",$iW, $iH, $iX, $iY,BitOR($WS_POPUP, $WS_VISIBLE,$WS_BORDER), $WS_EX_MDICHILD, $iHwnd)
GUICtrlCreateLabel ($iText,2,0,$iW,$iH,-1,$WS_EX_TRANSPARENT )
EndFunc
Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
_SendMessage($hWnd, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
EndFunc ;==>_WM_LBUTTONDOWN
Func SetTransparentBitmap($hGUI, $hImage, $iOpacity = 0xFF)
Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
$hScrDC = _WinAPI_GetDC(0)
$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
_WinAPI_ReleaseDC(0, $hScrDC)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
$tSize = DllStructCreate($tagSIZE)
$pSize = DllStructGetPtr($tSize)
DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha", $iOpacity)
DllStructSetData($tBlend, "Format", 1)
_WinAPI_UpdateLayeredWindow($hGUI, 0, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
_WinAPI_SelectObject($hMemDC, $hOld)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteDC($hMemDC)
EndFunc ;==>SetTransparentBitmap
mfg Freaky
ps: Das Hintergrundbild ist im Anhang und muss in einem Ordner Bilder leigen das im Hauptverzeichnis des Scripts liegt.