Man sollte niemals ein sleep in einer Callback-Funktion verwenden (müssen).
Bei deinem Problem hilft dir WM_ERASEBKGND weiter.
Weiters empfehle ich dir, immer mit einem Backbuffer zu arbeiten.
Das Neuzeichnen des Fensters geht schneller und es flackert nicht.
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)
Global $iWidth = 400, $iHeight = 400
[/autoit][autoit][/autoit][autoit]_GDIPlus_Startup()
Global $hGUI = GUICreate("GDI+ Tut", $iWidth, $iHeight)
GUISetOnEvent(-3, "_Exit")
Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
[/autoit][autoit][/autoit][autoit]Global $hBmp_Buffer = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)
Global $hGfx_Buffer = _GDIPlus_ImageGetGraphicsContext($hBmp_Buffer)
_GDIPlus_GraphicsClear($hGfx_Buffer, 0xFFFFFFFF)
_GDIPlus_GraphicsSetSmoothingMode($hGfx_Buffer, 2)
Global $hBrush = _GDIPlus_BrushCreateSolid(0xFFFF0000)
_GDIPlus_GraphicsFillRect($hGfx_Buffer, 100, 100, 200, 200, $hBrush)
_GDIPlus_BrushDispose($hBrush)
GUIRegisterMsg($WM_PAINT, "WM_PAINT")
GUIRegisterMsg($WM_ERASEBKGND, "WM_ERASEBKGND")
GUISetState()
While Sleep(10)
WEnd
Func _Exit()
_GDIPlus_GraphicsDispose($hGfx_Buffer)
_GDIPlus_BitmapDispose($hBmp_Buffer)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_Exit
Func WM_PAINT()
_GDIPlus_GraphicsDrawImage($hGraphics, $hBmp_Buffer, 0, 0)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_PAINT
Func WM_ERASEBKGND()
_GDIPlus_GraphicsDrawImage($hGraphics, $hBmp_Buffer, 0, 0)
Return True
EndFunc ;==>WM_ERASEBKGND
E