2 verschiedene Zeichenbereiche
-
Ich möchte gerne folgendes bewerkstelligen.
Ich zeichne Ein Signal auf einen Hintergrund. Ist das Signal am Fensterende angekommen, wird wieder von vorne angefangen. Dabei soll das alte Signal überschrieben werden. Dazu wollte ich quasi ein Rechteckt, welches über die ganze ganze Bildschrimhöhe geht, vor dem Signal laufen lassen, welches dann quasi als Radiergummi dient. Problem hierbei ist das natürlich auch der Hintergrund ausradiert wird. Ist es irgendwie möglich, bzw. wie, das der Radiergummi nur das Signal löscht und nicht den Hintergrund? Ich dachte da an 2 getrente zeichenbereiche oder so in der Art.
-
Warum erstellst du dir nicht eine Bitmap so groß wie dein Augabebereich und erzeugst darauf einen MemDC. Zeichnest deine sachen hinein, also hintergrund, eventuell ein Raster und die Kurve an sich und wenn das fertig ist blitteste das komplett in deinen Dialog. Wird im allgemeinen so gemacht.
-
Meinst du einfach die Bitmap komplett drüber zeichnen? Das mache ich momentan ja so allerdings sollen die alten Werte noch da sein bis Sie halt überzeichnet werden.
-
sirchillalot schrieb:
Meinst du einfach die Bitmap komplett drüber zeichnen?
Nein. Lies doch mal genau.
-
was bedeutet blitten denn

-
Kommt von BitBlt (bit-block transfer)
http://msdn.microsoft.com/en-us/library/dd183370(VS.85).aspx
-
Alternativ kannst du auch den Hintergrund in einer bitmap halten und deine kurve in einer anderen Bitmap und du blittest alles zusammen, ob das einfacher geht bezweifel ich. Außerdem ist das nicht unbedingt Resourcen schonend. Aber einen Radiergummi wie du suchst gibt es nicht, halte einfach die Werte deiner Kurve in einem Array/Liste die du vielleicht auf eine bestimmt Anzahl gegrenzt und die wie einen Stapel betreibst. Die Zeichenfunktion stellt dann einfach als erstes den Hintergrund komplett dar und Zeichnet dann anhand der Werte die Kurve. Wenn Du das in einer Bitmap mit MemDC machst und dann in deinen Dialog die Bitmap komplett Blittest umgehst du auch noch das Flickern, was unweigerlich entsteht wenn du direkt in den Dialog Zeichnest.
Also am einfachsten erzeugst du beim öffnen deines Dialoges eine Bitmap so groß wie dein Dialog/Zeichenbereich für die Grafik, erstellst dazu einen MemDC und lädst die Bipmap rein. Je nachdem wann gezeichnet werden soll, fürst du die Zeichnung in deiner Bitmap aus. Mit invalidate() sagst du zum schluß deinem Dialog das die Grafik ungültig ist worauf die OnPaint() deines Dialoges aufgerufen wird in der du dann mit BitBlt deines Dialog DC aus dem MemDC die Grafik in den Dialog "kopierst"
Hoffe das war jetzt einigermaßen verständlich.