Aus GUI mit Loch -> GUI mit "Eckigem-Loch"

  • 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
    [autoit]

    #include <GuiConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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)

    [/autoit] [autoit][/autoit] [autoit]

    $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

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_GuiHole

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    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?

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    Einmal editiert, zuletzt von retrokid (7. Januar 2012 um 18:39)

  • Ich schwärze ja nur ungerne an, aber schau dir bitte mal deine Signatur an.
    Wenn man schon Bots für Onlinespiele schreibt, sollte man das nicht hier, wo es als Missbrauch von Programmierfähigkeit angesehen wird, zur schau tragen.

    lg
    M

  • Hi ich versteh zwar nicht richtig, was du willst, aber wenn du Z 27. zu

    [autoit]

    $inner_rgn = DllCall("gdi32.dll", "long", "CreateRectRgn", "long", $i_x, "long", $i_y, "long", $i_x + $i_sizew, "long", $i_y + $i_sizeh)

    [/autoit]

    veränderst, wird ein Rechteck gezeichnet, bzw. radiert...

    RapIt

    Danke, genau das hab ich gesucht.

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D