Forum: PC-Programmierung Visual studio 2005 & Invalidate()


von fubu1000 (Gast)


Lesenswert?

Hallo,
Ich versuche gerade mit dem Befehl "Invalidate();" ein Panel zu löschen 
und die Grafik(ein sich bewegendes Objekt) in diesem neu zu zeichnen.
Das funktioniert auch toll, allerdings gibts leichte Laggs(flackert ein 
bisschen).
Es gibt ja bei dem Befehl "Invalidate" noch weitere Arten, um das Panel 
nur an bestimmten Stellen zu löschen, z.B. mit 
Invalidate(System:Drawing::Region ^region).
Allerdings verstehe ich nit ganz wie ich dieses nutzen kann.
Oder gibt es noch andere Arten das Event Paint aufzurufen ausser mit 
Invalidate???
Falls Jemand rat weiss, würde ich mich sehr freuen.
Vielen Dank im voraus und guten Rutsch, Fubu1000.

von Simon K. (simon) Benutzerseite


Lesenswert?

Das Flackern liegt daran, dass nach einem Invalidate() erstmal 
OnEraseBkgnd() aufgerufen wird und den Hintergrund malt. Anschließend 
das OnPaint() damit alles neu gezeichnet wird.

Eine Möglichkeit das zu Umgehen, war es, OnEraseBkgnd() zu 
überschreiben, sodass der Background nicht mehr gelöscht wird und in 
OnPaint() einen neuen DeviceContext anzulegen, der Kompatibel zum 
Zeichen-DC ist, in diesen dann den Hintergrund einzuzeichnen und 
anschließend der Vordergrund. Zuletzt wurde dann der Kompatible DC in 
den originalen Zeichen-DC kopiert.

Leider hast du nicht angegeben welche Sprache du benutzt(C++? C#?) sieht 
nämlich nach C# aus.

von fubu1000 (Gast)


Lesenswert?

Hallo,
@Simon: Ich arbeite mit C++, habe deine Ausführung verstanden, weiss 
jedoch nit wie ich das umgehen soll mit dem EraseBkgnd().
Werde mich moin mal hinsetzen und versuchen, jedoch wäre ich über jede 
Hilfe dankbar.
Thx und guten Rutsch allen,Fubu.

von Simon K. (simon) Benutzerseite


Lesenswert?

Achso, dieses Managed C++, kann das sein? Sowas wie 
Invalidate(System:Drawing::Region ^region) habe ich ja noch nie gesehen 
;)

wühl dich mal hierdurch:
http://www.google.de/search?hl=de&q=gdi+double+buffering&btnG=Google-Suche&meta=&aq=t&oq=gdi+double+bu

von fubu1000 (Gast)


Lesenswert?

Hallo,
Danke für die Mühe Simon.
Habe das Problem damit beseitigt, das ich einfach ne Picturebox, statt 
dem Panel genommen habe. Jetzt flackert es nicht mehr.
Vielen Dank und gruss fubu.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.