Laden...

Koordinatenkreuz zeichnen, Bild flackert

Erstellt von MrDigi vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.419 Views
M
MrDigi Themenstarter:in
9 Beiträge seit 2007
vor 13 Jahren
Koordinatenkreuz zeichnen, Bild flackert

Hallo zusammen,

und schonwieder wer mit einem "Flackerproblem". Habe schon die SuFu bemüht, aber nichts passendes gefunden.

Mein Problem abstrakt umrissen:
Ich zeichne in ein Panel mehrere Graphen, das funktioniert auch problemlos. Habe dazu die OnPaint-Methode überschrieben.

Jetzt habe ich in das Panel ein Koordinatenkreuz gelegt, welches dem Mauszeiger folgt. Also der Mittelpunkt des Koordinatenkreuzes liegt unterm Mauszeiger, zusätzlich werden die X- und Y- Position des Mauszeigers angezeigt.

Dazu habe folgende Ansätze probiert:

  1. Versuch: Bei jedem MouseMove-Event im Panel rufe ich Refresh() auf, damit alles neu gezeichnet wird, inklusive Koordinatenkreuz. Ergebnis: Viele Events, der ganze Graph flackert beim Maus bewegen

  2. Versuch: Das MouseMove-Event ruft maximal 10 mal pro Sekunde das Refresh() auf. Ergebnis minimal besser, aber es flackert weiterhin.

  3. Versuch: Ich zeichne den Graphen in ein Bitmap im Speicher da dieser sich nicht verändert. Ich lade bei jedem MouseMove() das Bitmap und zeichne das Koordinatenkreuz dort hinein. Ergebnis bleibt dasselbe, es flackert. Anscheinend ist das Bitmap laden/zeichnen nicht schneller als den Graphen komplett neu zu zeichnen.

Welche Möglichkeiten habe ich noch, oder habe ich einen falschen Ansatz gewählt ?

Wäre Invalidate die Lösung der Wahl ?

Grüße
MrDigi

Gelöschter Account
vor 13 Jahren

lade das bitmap nur einmal und merke es dir in einer variable. zeichne das bitmap in der onpaint und das koordinatensystem.

rufe in der onmousemove methode ein invalidate (nicht refresh!!) auf, das nur den absolut notwendigen bereich umschließt (notfalls mehrmals mit überschneidenden bereichen).

im falle eines simplen kreuzes wären das 2 mal invalidate je eins für jede achse mit einer breite entsprechend der gezeichneten dicke der linien + nochmals 2 mal für die alte gezeichnete position.