Hohoho,
Ich wollte ein transparentes Fenster machen, auf dem Buttons sind und ein PNG-Bild. Leider kann man weder transparente Fenster, noch PNG-Dateien einfach anzeigen lassen.
Ein Script für ein transparentes Fenster habe ich hier gefunden: Link
Ein Script für eine PNG-Datei habe ich hier gefunden: Link (Beispiel 3)
Nur wenn ich das ganze jetzt verbinden will, wird der transparente Hintergrund der PNG-Datei nicht transparent, da das Transparenter-Hintergrund Script vom Bild die ganze Fläche ignoriert.
Hier ist mein aktuelles Script, welches ihr mir zusammenkopiert habe und mittlerweile völlig zerstört durch irgendwelche nötigen Änderungen:
Spoiler anzeigen
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
_GDIPlus_StartUp()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$FGUI = GUICreate("Test Windows regions", 500,350,Default,Default, $WS_POPUP)
$FImage=_GDIPlus_ImageLoadFromFile(@ScriptDir&"\images\header.png")
$FGraphic=_GDIPlus_GraphicsCreateFromHWND($FGUI)
$FButtonBeen=GUICtrlCreateButton("Beenden", 0, 120, 150)
GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW)
$pos=WinGetPos($FGUI)
Global $Element[2]
$Element[0]=$FButtonBeen
$Element[1]=$FGraphic
_GuiHole($FGUI, 0,0, 500, 350)
While 1
$msg = GUIGetMsg()
Switch $msg
Case $FButtonBeen
ExitLoop
EndSwitch
WEnd
Close()
Func _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
Local $outer_rgn, $inner_rgn, $combined_rgn
$combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
_WinAPI_DeleteObject($outer_rgn)
_WinAPI_DeleteObject($inner_rgn)
_AddCtrlRegion($combined_rgn, $Element)
_WinAPI_SetWindowRgn($h_win, $combined_rgn)
EndFunc ;==>_GuiHole
Func _AddCtrlRegion($full_rgn, $ctrl_id)
Local $ctrl_pos[4], $ctrl_rgn
If IsArray($ctrl_id) Then
For $i = 0 To UBound($ctrl_id) -1
$ctrl_pos = ControlGetPos($FGUI, "", $ctrl_id[$i])
If $i=1 Then
Local $ctrl_pos[5]
$ctrl_pos[0]=0
$ctrl_pos[1]=0
$ctrl_pos[2]=500
$ctrl_pos[3]=49
EndIf
$ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
_WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
_WinAPI_DeleteObject($ctrl_rgn)
Next
Else
$ctrl_pos = ControlGetPos($FGUI, "", $ctrl_id)
$ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
_WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
_WinAPI_DeleteObject($ctrl_rgn)
EndIf
EndFunc ;==>_AddCtrlRegion
Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
_WinAPI_RedrawWindow($FGUI, 0, 0, $RDW_UPDATENOW)
_GDIPlus_GraphicsDrawImage($FGraphic, $FImage, 0, 0)
_WinAPI_RedrawWindow($FGUI, 0, 0, $RDW_VALIDATE)
Return $GUI_RUNDEFMSG
EndFunc
Func Close()
_GDIPlus_GraphicsDispose($FGraphic)
_GDIPlus_ImageDispose($FImage)
_GDIPlus_ShutDown()
Exit
EndFunc
Wäre schön, wenn jemand das zum laufen bringen könnte. Wahrscheinlich müsste die ganze Datei neu geschrieben werden.
Als header.png könnt ihr ja einfach irgendein PNG-Bild mit transparenz verwenden.