OnDraw() Zeichnungs Bereich löschen
-
Hallo,
wie kann ich in der OnDraw Methode den Zeichnungsbereich vorher löschen, bevor ich meine Objekte nochmal neu zeichne?
Danke im Vorraus.GRuß
Marius
-
normal zeichnet OnDraw immer komplett neu, da muss man nix löschen.
wenn reste bleiben, könnte es noch drann liegen das du dein CDC auf TRANSPARENT gesetzt hast, zum bsp um text zu zeichnen.
um das zu umgehen solltest du dich mit memDC's auseinandersetzen.
sollte man eh einsetzen sowas da das normalerweise jegliches flackern unterbindet
-
Bei mir zeichnet es irgendwie nicht bei jedem mal neu.
Ich habe in meinem Programm eine Funktion, mit der ich bestimmte Kreis im Bild mit der Maus verschieben kann. Bei jedem OnMouseMouve ivent verändere ich die Position von meinem Objekt und rufe dann OnDraw( GetDC() ) auf.
Jedoch kriege ich eine Reihe von Kreisen in meinem Fenster gezeichnet. Wenn ich aber das Fenster minimiere und wieder maximiere ist alles wie es sein sollte, die Reihe verschwindet.
-
die frage ist, wo zeichnest du.
im mousemove oder im ondraw.
normal sollte es so sein das du im mousemove, die änderungen des objectes dir speicherst, also wo es hinbewegt wird wenn es angepackt wird
und im ondraw sollte es dann gezeichnet werden, um das optimal hinzubekommen solltest du auch blos mit InvalidateRect(...) arbeiten, und nur den bereich um das object herum updaten.
arbeiten mit GetDC ist nur von temporärer dauer. wenn du also mit getdc arbeiten magst, solltest du im mousemove ein invalidateRect(..) einbauen.
und den bereich wieder löschen den du da reinmalst.es mag ganz gut sein, getdc und dergleichen, wenn du des handling aber komplett ins OnDraw umlagerst, bekommst du weniger probleme...
-
Die View sollte sowieso nur Daten aus dem DOC zeichnen.
In OnMouseMove ändert man nur den Wert in der DOC und ruft InvalidateRect(...) zum neu Zeichnen auf.
Die View OnPaint holt sich aus der DOC was zum Zeichnen ist und tut dies.