Ich hab das problem, dass ich eine durchsichtige Ellipse machen will, diese dann aber auch nach einer Zeit entfernen will.
Ich hab das ganze ja schon in GDI gesehen ( Loch in GUI ), aber das is eben nicht in GDI+.
Schonmal Danke im Vorraus.
Das Script in GDI:
Spoiler anzeigen
#include <GuiConstants.au3>
[/autoit] [autoit][/autoit] [autoit]$my_gui = GUICreate("MyGUI", @DesktopWidth, @DesktopHeight, 0, 0, 0x80000000, BitOR(0x00000080, 0x00000008))
GUISetBkColor(0x000000, $my_gui)
GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]_GuiHole($my_gui, @DesktopWidth/16, @DesktopHeight/8, @DesktopWidth/1.15, @DesktopHeight/1.30)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case Else
;;;
EndSelect
WEnd
Exit
Func _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
Dim $pos, $outer_rgn, $inner_rgn, $wh, $combined_rgn, $ret
$pos = WinGetPos($h_win)
$outer_rgn = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", 0, "long", 0, "long", $pos[2], "long", $pos[3])
If IsArray($outer_rgn) Then
$inner_rgn = DllCall("gdi32.dll", "long", "CreateEllipticRgn", "long", $i_x, "long", $i_y, "long", $i_x + $i_sizew, "long", $i_y + $i_sizeh)
If IsArray($inner_rgn) Then
$combined_rgn = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", 0, "long", 0, "long", 0, "long", 0)
If IsArray($combined_rgn) Then
DllCall("gdi32.dll", "long", "CombineRgn", "long", $combined_rgn[0], "long", $outer_rgn[0], "long", $inner_rgn[0], "int", 4)
$ret = DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $h_win, "long", $combined_rgn[0], "int", 1)
If $ret[0] Then
Return 1
Else
Return 0
EndIf
Else
Return 0
EndIf
Else
Return 0
EndIf
Else
Return 0
EndIf
EndFunc ;==>_GuiHole