GUI unsichtbar button sochtbar

  • Guten tag zusammen
    könnte mir jemand sagen wie ich ein GUI unsichtbar mache, jedoch die Button noch sichtbar. Bzw die GUI nur einem bestimmten Prozentsatz sichtbar?
    danke

  • Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <WinAPI.au3>

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

    Global $aButton[5]

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

    $gui = GUICreate("Test Windows regions", 150, 150, @DesktopWidth-170, -1, $WS_POPUP, $WS_EX_TOPMOST)
    $aButton[0] = GUICtrlCreateButton("Button 1", 0, 0, 150)
    $aButton[1] = GUICtrlCreateButton("Button 2", 0, 30, 150)
    $aButton[2] = GUICtrlCreateButton("Button 3", 0, 60, 150)
    $aButton[3] = GUICtrlCreateButton("Button 4", 0, 90, 150)
    $aButton[4] = GUICtrlCreateButton("Exit", 0, 120, 150)
    GUISetState(@SW_SHOW)

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

    $pos = WinGetPos($gui)
    _GuiHole($gui, 0, 0, 150, 150)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $aButton[4]
    ExitLoop
    Case $aButton[0]
    MsgBox(0, '', 'Button1 geklickt')
    Case $aButton[1]
    MsgBox(0, '', 'Button2 geklickt')
    Case $aButton[2]
    MsgBox(0, '', 'Button3 geklickt')
    Case $aButton[3]
    MsgBox(0, '', 'Button4 geklickt')
    EndSwitch
    WEnd

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

    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, $aButton)
    _WinAPI_SetWindowRgn($h_win, $combined_rgn)
    EndFunc ;==>_GuiHole

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

    Func _AddCtrlRegion($full_rgn, $ctrl_id)
    Local $ctrl_pos, $ctrl_rgn
    If IsArray($ctrl_id) Then
    For $i = 0 To UBound($ctrl_id) -1
    $ctrl_pos = ControlGetPos($gui, "", $ctrl_id[$i])
    $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($gui, "", $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

    [/autoit]

    So? Hat Bugfix mal gemacht.

  • Jep und in der Funktion sind das die wichtigen Sachen (den Rest kannste raushauen)

    [autoit]


    Func _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
    Local $combined_rgn
    $combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0) ; Hier erstellst du eine 'region' mit 0 Pixel² Größe'
    _AddCtrlRegion($combined_rgn, $aButton) ; um die Controls (Buttons) hinzuzufügen
    _WinAPI_SetWindowRgn($h_win, $combined_rgn) ;und hier weist du der Gui diese Region zu
    EndFunc ;==>_GuiHole

    [/autoit]
  • Was mache ich falsch?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #Include <WinAPI.au3>

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

    Global $hGUI, $hImage, $hGraphic, $hImage1

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

    ; Create GUI
    $hGUI = GUICreate("Show PNG", 1000, 800)
    GUISetState() ;Muss vor den Ladevorgang

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

    ; Load PNG image
    _GDIPlus_StartUp()
    $hImage = _GDIPlus_ImageLoadFromFile("C:\Dokumente und Einstellungen\Hendrik\Favoriten\Eigene Dateien\AutoIt\INC\Pic\Neu\MAIN.png")
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    _GDIPlus_GraphicsDrawImage ($hGraphic, $hImage, 100, 100)
    _GDIPlus_ShutDown()
    _GuiHole($hGUI, 0, 0, 150, 150,$hGraphic)

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

    do
    until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh,$hObjekt)
    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, $hObjekt)
    _WinAPI_SetWindowRgn($h_win, $combined_rgn)
    EndFunc ;==>_GuiHole

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

    Func _AddCtrlRegion($full_rgn, $ctrl_id)
    Local $ctrl_pos, $ctrl_rgn
    If IsArray($ctrl_id) Then
    For $i = 0 To UBound($ctrl_id) -1
    $ctrl_pos = ControlGetPos($hGUI, "", $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)
    Next
    Else
    $ctrl_pos = ControlGetPos($hGUI, "", $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

    [/autoit]

    mfg. Jam00

    • Offizieller Beitrag

    Du willst nur die Button? - Das Bsp. ist doch (fast so) in der Hilfe:

    Spoiler anzeigen
    [autoit]

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

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

    ; get height of window title and width of window frame - may be different when XP theme is ON/OFF
    Global $htit = _WinAPI_GetSystemMetrics($SM_CYCAPTION)
    Global $frame = _WinAPI_GetSystemMetrics($SM_CXDLGFRAME)

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

    $gui = GUICreate("Test Windows regions", 350, 210)
    $btn_1 = GUICtrlCreateButton("Button 1", 100, 30, 150)
    $btn_2 = GUICtrlCreateButton("Button 2", 100, 60, 150)
    $btn_3 = GUICtrlCreateButton("Button 3", 100, 90, 150)
    $btn_4 = GUICtrlCreateButton("Button 4", 100, 120, 150)
    $btn_exit = GUICtrlCreateButton("Exit", 100, 150, 150)
    GUISetState(@SW_SHOW)

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

    _GuiHole($gui, 0, 0, 350, 210)

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit
    ExitLoop
    Case $msg = $btn_1
    MsgBox(0, 'Klick', 'Button 1')
    Case $msg = $btn_2
    MsgBox(0, 'Klick', 'Button 2')
    Case $msg = $btn_3
    MsgBox(0, 'Klick', 'Button 3')
    Case $msg = $btn_4
    MsgBox(0, 'Klick', 'Button 4')
    EndSelect
    WEnd

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

    Func _GuiHole($h_win, $i_x, $i_y, $i_sizew, $i_sizeh)
    Local $combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
    _AddCtrlRegion($combined_rgn, $btn_1)
    _AddCtrlRegion($combined_rgn, $btn_2)
    _AddCtrlRegion($combined_rgn, $btn_3)
    _AddCtrlRegion($combined_rgn, $btn_4)
    _AddCtrlRegion($combined_rgn, $btn_exit)
    _WinAPI_SetWindowRgn($h_win, $combined_rgn)
    EndFunc ;==>_GuiHole

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

    Func _AddCtrlRegion($full_rgn, $ctrl_id)
    Local $ctrl_pos, $ctrl_rgn
    $ctrl_pos = ControlGetPos($gui, "", $ctrl_id)
    $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0] + $frame, $ctrl_pos[1] + $htit + $frame, _
    $ctrl_pos[0] + $ctrl_pos[2] + $frame, $ctrl_pos[1] + $ctrl_pos[3] + $htit + $frame)
    _WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
    _WinAPI_DeleteObject($ctrl_rgn)
    EndFunc ;==>_AddCtrlRegion

    [/autoit]