Hallöchen,
ich habe folgendes Problem entdeckt:
Die per GDI+ auf eine GUI gezeichneten Objekte verschwinden ja bekanntlich, wenn das Fenster minimiert wird etc...
Um das zu umgehen gibt es im Netz genug Lösungen, in denen die WM_PAINT-Message der GUI abgefangen und alles neu gezeichnet wird. So weit so gut, doch bei mir wollte das einfach nicht klappen. Ich entwickle gerade ein größeres Projekt, da kann sich ja leicht ein Fehler einschleichen, dachte ich mir... Also hab ich weiter nach Lösungen gesucht und geguckt, was ich falsch mache.
>Hier< war ein relativ simples Programm zum Neuzeichnen per WM_PAINT verfasst. Doch jetzt der Witz: Das funktionierte ebenfalls nicht! Nach einiger Zeit habe ich dann (mehr oder weniger durch Zufall) die Lösung gefunden: In der WM_PAINT-Funktion muss am Anfang ein Sleep(...) eingebaut werden! Wieso auch immer, aber dann funktionierte auch mein größeres Projekt...
Da die Lösung mich ziemlich verwirrt und ich das Sleep nicht unbedingt verwenden möchte, wollte ich mal die Experten um Rat fragen
Also: Wieso klappt das folgende Beispiel nur, wenn das "Sleep(10)" in Zeile 29 nicht auskommentiert ist? Und wie kann ich das auch ohne Sleep lösen?
Spoiler anzeigen
#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]Opt("GUIOnEventMode", 1)
OnAutoItExitRegister("_Exit")
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]Global $iWidth = 400, $iHeight = 400
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("GDI+ Tut", $iWidth, $iHeight)
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBrush = _GDIPlus_BrushCreateSolid(0xFFFF0000)
GUISetOnEvent(-3, "_Exit")
GUIRegisterMsg(0x000F,"WM_PAINT")
GUISetState()
While 1 * Sleep(10)
WEnd
Func _Exit()
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_Exit
Func WM_PAINT()
;Sleep(10)
_GDIPlus_GraphicsFillRect($hGraphic,100,100,200,200,$hBrush)
EndFunc
PS: Betriebssystem = Windows 7 x64
Danke schonmal für eure Hilfe
MM