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.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.