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
#include-once
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>
#include '_MouseHover.au3'
#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
#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
Global Const $SC_Titlebar_Height =29
Global Const $SC_Footer_Height =26
Global Const $SC_Frame_Thickness = 3
Global Const $SC_Btn_Dim = 17
Global $SC_Width = $SC_Width_Init
Global $SC_Height = $SC_Height_Init
Global $int_Minimize=6
Global $int_Maximize=12
Global $int_XClose=0
#EndRegion
#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")
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
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")
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)
#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
#Region Hauptschleife
While 1
Sleep(1000) ; Häng rum
WEnd
#EndRegion ;Ende Hauptprogramm
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func Minimize()
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_MINIMIZE)
EndFunc
Func Terminate()
;~ msgbox(0,"","Wird beendet")
_GDIPlus_ShutDown ()
Exit
EndFunc
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
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
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
Func _ProcessHover()
$ControlID = _HoverCheck()
If IsArray($ControlID) Then
If $ControlID[0] = "AcquiredHover" Then
_HoverFound($ControlID[1])
Else
_HoverLost($ControlID[1])
EndIf
EndIf
EndFunc
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