Hallo,
ich wollte ja ein Hintergrundbild in meine GUI mit Tab einbauen, das hat ja nicht so ganz geklappt.
Heute ist mir mein altes Tool eingefallen, was ich einmal zum Spaß programmiert habe:
Spoiler anzeigen
#include <GuiConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
HotKeySet("{ESC}","_exit")
[/autoit] [autoit][/autoit] [autoit]$search_gui = GUICreate("Search", 5000, 5000,-2000,-2000,$WS_POPUP)
GUISetBkColor(0x0, $search_gui)
_GuiHole($search_gui, 2500, 2500, 200, 200)
GUISetState()
While 1
$msg = GUIGetMsg()
$mpos = MouseGetPos()
WinMove("Search","",$mpos[0]-2600,$mpos[1]-2600)
If WinGetTitle("[active]","") <> "Search" Then
Winactivate("Search","")
EndIf
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
[/autoit] [autoit][/autoit] [autoit]Func _exit()
Exit
EndFunc
Es zeichnet ein Loch in eine GUI. Wenn ich das Loch eckig machen könnte, dann könnte ich eine ParentGUI mit Bild über die eigentliche GUI setzen und da, wo die Controls, bzw. das Tab-Menü sind ein "Kasten-Loch" erstellen, sodass das Bild an der Stelle, wo sich Controls befinden, "durchgebohrt" wird und so die Controls durchscheinen und man sie anklicken kann.
Wie kann ich aus dieser Funktion eine Funktion machen, die ein Rechteck anstelle eines Kreies wegradiert?