GUISetState(@SW_MINIMIZE) schließt die ganze GUI - Popup-GUI

  • Guten Abend liebe AutoIt-Community,

    ich habe vor, eine GUI mit Hilfe von PNG's zu erstellen und bin ganz am Anfang. Da ist auch schon das erste Phänomen:
    Wenn ich die Funktion "Minimize()" aufrufe, dann minimiert die GUI zunächst, verschwindet dann aber komplett! Könnt ihr mir einen Tip geben woran das liegt?

    Ich habe den Code und die Dateien im Anhang platziert, aber vielleicht sehr ihr es auch schon so.

    Spoiler anzeigen
    [autoit]

    #include-once
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include '_MouseHover.au3'

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

    #Region Options
    Opt('MustDeclareVars', 1) ; 1 = Variables must be pre-declared
    Opt('PixelCoordMode' ,0 ) ; 0 = relative coords to the defined window
    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus
    #EndRegion

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

    #Region Dim Variablen
    Global Const $SC_Width_Init = 800
    Global Const $SC_Height_Init = 566
    Global Const $SC_Width_Max = 1920
    Global Const $SC_Height_Max = 1200

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

    Global Const $SC_Titlebar_Height =29
    Global Const $SC_Footer_Height =26
    Global Const $SC_Frame_Thickness = 3
    Global Const $SC_Btn_Dim = 17

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

    Global $SC_Width = $SC_Width_Init
    Global $SC_Height = $SC_Height_Init

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

    Global $int_Minimize=6
    Global $int_Maximize=12
    Global $int_XClose=0
    #EndRegion

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

    #Region GUI-Erstellung
    _GDIPlus_Startup()
    Global $h_SC = GUICreate('GUI', $SC_Width, $SC_Height, -1, -1,BitOR($WS_CLIPSIBLINGS,$WS_POPUP));, $WS_POPUP+$WS_EX_WINDOWEDGE) ;
    GUISetOnEvent($GUI_EVENT_CLOSE, "Terminate")
    GUIRegisterMsg($WM_PAINT, "Redraw_GUI")

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

    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($h_SC)

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

    Global $hImg_Title = _GDIPlus_ImageLoadFromFile("Title.png")
    Global Const $hImg_Title_Width = _GDIPlus_ImageGetWidth ($hImg_Title)/2
    Global $hImg_TitleTint = _GDIPlus_ImageLoadFromFile("header_black_tint.png")
    Global Const $SC_Tint_Width = _GDIPlus_ImageGetWidth ($hImg_TitleTint)
    Global Const $SC_Tint_Height = _GDIPlus_ImageGetHeight ($hImg_TitleTint)
    ;~ Global $TitleTint = GUICtrlCreateLabel('',) ; falls etwas passieren soll bei hover über Tint

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

    Global $hImg_Btn = _GDIPlus_ImageLoadFromFile("but.png") ;enthält die PNG-Abschnitte für die Knöpfe, auch die Hover-Bilder

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

    Global $Minimize = GUICtrlCreateLabel('',$SC_Width-3*$SC_Btn_Dim-2*$SC_Frame_Thickness,2*$SC_Frame_Thickness,$SC_Btn_Dim,$SC_Btn_Dim,Default,$WS_EX_TRANSPARENT)
    GUICtrlSetOnEvent($Minimize, "Minimize")
    Global $Maximize = GUICtrlCreateLabel('',$SC_Width-2*$SC_Btn_Dim-2*$SC_Frame_Thickness,2*$SC_Frame_Thickness,$SC_Btn_Dim,$SC_Btn_Dim,Default,$WS_EX_TRANSPARENT)
    Global $XClose = GUICtrlCreateLabel('',$SC_Width-$SC_Btn_Dim-2*$SC_Frame_Thickness,2*$SC_Frame_Thickness,$SC_Btn_Dim,$SC_Btn_Dim,Default,$WS_EX_TRANSPARENT)
    GUICtrlSetOnEvent($XClose, "Terminate")

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

    Global $Title = GUICtrlCreatePic('', 0, 0, $SC_Width, $SC_Titlebar_Height, BitOR($SS_NOTIFY, $WS_CLIPCHILDREN, $WS_GROUP, $WS_CLIPSIBLINGS), BitOR($GUI_WS_EX_PARENTDRAG, $WS_EX_LAYERED))

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

    Global $Pic = GUICtrlCreatePic("Table_Carpet.jpg", $SC_Frame_Thickness, $SC_Titlebar_Height, $SC_Width-2*$SC_Frame_Thickness, $SC_Height-$SC_Titlebar_Height-$SC_Footer_Height, BitOR($SS_NOTIFY, $WS_CLIPCHILDREN, $WS_GROUP, $WS_CLIPSIBLINGS), $WS_EX_LAYERED)

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

    Global $Footer = GUICtrlCreatePic('footer-bg.jpg', 0, $SC_Height-$SC_Footer_Height, $SC_Width, $SC_Footer_Height, BitOR($SS_NOTIFY, $WS_CLIPCHILDREN, $WS_GROUP, $WS_CLIPSIBLINGS), $WS_EX_LAYERED)

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

    ;Ab hier wird der Rahmen erstellt: Das sind einfach Label deren Bk-Color gesetzt wird... geht vllt eleganter
    Global $Frame_left = GUICtrlCreateLabel('', 0, $SC_Titlebar_Height, $SC_Frame_Thickness, $SC_Height)
    Global $Frame_right = GUICtrlCreateLabel('', $SC_Width-$SC_Frame_Thickness, $SC_Titlebar_Height, $SC_Frame_Thickness, $SC_Height)
    Global $Frame_bottom = GUICtrlCreateLabel('', 0, $SC_Height-$SC_Frame_Thickness, $SC_Width, $SC_Frame_Thickness)
    GUISetState()
    local $color = PixelGetColor ( 1, $SC_Titlebar_Height-1, $h_SC)
    GUICtrlSetBkColor($Frame_left, $color)
    GUICtrlSetBkColor($Frame_right, $color)
    GUICtrlSetBkColor($Frame_bottom, $color)

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

    #EndRegion ;GUI-Erstellung Ende

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

    #Region Hover-Registrierung
    ;Knöpfe für die Hover-Überwachung registrieren... siehe #include '_MouseHover.au3'
    _HoverAddCtrl($Minimize)
    _HoverAddCtrl($Maximize)
    _HoverAddCtrl($XClose)
    AdlibEnable("_ProcessHover", 5)
    #EndRegion

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

    #Region Hauptschleife
    While 1
    Sleep(1000) ; Häng rum
    WEnd

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

    #EndRegion ;Ende Hauptprogramm

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

    Func Minimize()

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

    GUISetState(@SW_MINIMIZE)

    EndFunc

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

    Func Terminate()
    ;~ msgbox(0,"","Wird beendet")
    _GDIPlus_ShutDown ()
    Exit

    EndFunc

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

    Func Redraw_GUI()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($h_SC)
    _WinAPI_RedrawWindow($h_SC, 0, 0, $RDW_UPDATENOW)
    _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $hImg_Title, 0, 0,$hImg_Title_Width-1, $SC_Titlebar_Height,0,0,$SC_Width,$SC_Titlebar_Height)
    ;~ _GDIPlus_GraphicsDrawImage($hGraphic, $hImage1, 0, 0)
    _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $hImg_TitleTint, 0, 0,$SC_Tint_Width,$SC_Tint_Height,$SC_Width-$SC_Tint_Width-$SC_Frame_Thickness,$SC_Frame_Thickness,$SC_Tint_Width,$SC_Tint_Height)

    _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $hImg_Btn, $int_Minimize*$SC_Btn_Dim, 0,$SC_Btn_Dim,$SC_Btn_Dim,$SC_Width-3*$SC_Btn_Dim-2*$SC_Frame_Thickness,2*$SC_Frame_Thickness,$SC_Btn_Dim,$SC_Btn_Dim)
    _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $hImg_Btn, $int_Maximize*$SC_Btn_Dim, 0,$SC_Btn_Dim,$SC_Btn_Dim,$SC_Width-2*$SC_Btn_Dim-2*$SC_Frame_Thickness,2*$SC_Frame_Thickness,$SC_Btn_Dim,$SC_Btn_Dim)
    _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $hImg_Btn, $int_XClose*$SC_Btn_Dim, 0,$SC_Btn_Dim,$SC_Btn_Dim,$SC_Width-$SC_Btn_Dim-2*$SC_Frame_Thickness,2*$SC_Frame_Thickness,$SC_Btn_Dim,$SC_Btn_Dim)
    ;~ _GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage1, 17, 0,17,17)
    _WinAPI_RedrawWindow($h_SC, 0, 0, $RDW_VALIDATE)
    Return $GUI_RUNDEFMSG
    EndFunc

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

    Func _HoverFound($ControlID)
    Switch $ControlID
    Case $Minimize
    $int_Minimize=$int_Minimize+1
    Redraw_GUI()
    Case $Maximize
    $int_Maximize=$int_Maximize+1
    Redraw_GUI()
    Case $XClose
    $int_XClose=$int_XClose+1
    Redraw_GUI()
    EndSwitch
    EndFunc

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

    Func _HoverLost($ControlID)
    Switch $ControlID
    Case $Minimize
    $int_Minimize=$int_Minimize-1
    Redraw_GUI()
    Case $Maximize
    $int_Maximize=$int_Maximize-1
    Redraw_GUI()
    Case $XClose
    $int_XClose=$int_XClose-1
    Redraw_GUI()
    EndSwitch
    EndFunc

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

    Func _ProcessHover()
    $ControlID = _HoverCheck()
    If IsArray($ControlID) Then
    If $ControlID[0] = "AcquiredHover" Then
    _HoverFound($ControlID[1])
    Else
    _HoverLost($ControlID[1])
    EndIf
    EndIf
    EndFunc

    [/autoit]

    Der Code rund um GDI+ muss noch sauber gemacht werden, ich glaube da sind so einige Handler die nicht befreit werden...


    Ich bedanke mich für eure Hilfe
    JStaxton