Ich weiß, gefühlt schon 100 mal behandelt, leider konnte mir bisher kein Beitrag im Forum so richtig weiterhelfen.
Ich spiele grade etwas mit GDI Plus rum und versuche Buttons aus transparenten PNG Bilder zu erstellen. Ab und an kommt es beim neuzeichnen der png Bilder zu einem Flackern. Ich hörte von diesem Backbuffer, bekomme ihn aber einfach nicht umgesetzt.
Hier mal ein Beispiel, $Pic bitte anpassen:
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
Opt("GUIOnEventMode", 1) ;Gui on Event Mode
Global $Pic = @ScriptDir & "\lib\gra\buttons\play.png"
Global $hGUI_Main, $hGraphic, $hImage
Global $hGUI_Main_Color = 0xF0F0F0
;------------------
_Gui()
_Draw()
While 1
Sleep(500)
_Redraw()
WEnd
;------------------
Func _Gui()
$hGUI_Main = GUICreate("", 400 , 400, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
GUISetState(@SW_SHOW, $hGUI_Main)
EndFunc
Func _Draw()
;Pic einmal normal zeichen
_GDIPlus_StartUp()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI_Main)
$hImage = _GDIPlus_ImageLoadFromFile($Pic)
_GDIPlus_GraphicsDrawImageRect( $hGraphic, $hImage, 0, 0, 400, 400)
EndFunc
Func _Redraw()
;Pinsel zum übermalen vorbereiten
$hBrush = _GDIPlus_BrushCreateSolid(0xFF000000 + $hGUI_Main_Color)
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)
;Übermalen
_GDIPlus_GraphicsDrawImageRect( $hGraphic, $hBrush, 0, 0, 400, 400)
;Bild in den Backbuffer laden und neu zeichen
;?????
_GDIPlus_GraphicsDrawImageRect( $hGraphic, $hImage, 0, 0, 400, 400)
EndFunc
Func _Exit()
;~ _GDIPlus_GraphicsDispose($backbuffer)
;~ _GDIPlus_BitmapDispose($bitmap)
Exit
EndFunc
Alles anzeigen
Im eigentlichen Programm zeichne ich natürlich nicht alle 500ms neu, ist nur ein Beispiel.
Kann mir bitte jemand auf die Sprünge helfen.
Edit: Das Beispiel ist vielleicht etwas unglücklich gewählt, ein Schuh wird draus wenn es nicht jedes mal wieder neu in den Backbuffer galaden wird sondern nur aus dem Backbuffer neu gezeichnet wird.
Mir geht es hauptsächlich um das WIE in den Backbuffer und WIE von dort aufs GUI zeichen.