Erneutes Zeichnen auf einem Button

buschke

Mitglied
Hallo,
ich habe folgendes problem:
ich habe eine Klasse erzeugt mit der ich eine kleine zeichnung, die zur laufzeit generiert wird, auf einen button setze. die zeichnung erstelle ich in der OnPaint-Funktion meiner Klasse. soweit funktioniert es auch.
wenn ich nun ein anderes fenster über meinen Button ziehe, verschwindet die zeichnung an den stellen, über denen das fester lag. Wie kann ich es erreichen, daß die Zeichnung immer wieder neu erstellt wird? ich hoffe, mir kann jemand helfen.

buschke
 
also, ich habe mal ein bisschen rumprobiert. wenn ich die berechnung in der OnPaint-Funktion durchführe entsteht eine endlosschleife, da die funktion immer wieder automatisch aufgerufen wird und die berechnung der zeichnung einige zeit in anspruch nimmt. wenn ich die berechnung in einer eigenen funktion mache, entsteht der beschriebene fehler, daß nicht neu gezeichnet wird.
meine Überlegung nun: kann ich eine Zeichnung, die ich während der Laufzeit erzeuge als bitmap oder ähnliches speichern, so daß ich in der OnPaint-Funktion nur das bild immer wieder aktualisieren muß? ist das überhaupt eine vernünftige lösung und wenn ja, wie kann ich das realisieren?
Danke, buschke
 
Das Zwischenspeichern in einer HBITMAP ist da die beste Methode. Einfach beim Erstellen/Resizen der Control ein HBITMAP erstellen lassen, am Ende natürlich wieder freigeben. Beim erneuten Zeichnen der Bitmap malst du erst mal alles in diese HBITMAP.
In OnPaint reicht dann ein einfaches BitBlt (mit HDC-Umgeschalte natürlich), dafür gibt's aber genug Beispiele hier in den Foren.

Das hat den Vorteil A) das Darstellen beim Wiederauftauchen unter einem vorbeiziehendem Fenster wird alles wesentlich schneller dargestellt und B) du bekommst auch kein Geflackere weil du dadurch Double-Buffering hast.
 
Zurück