Ich möchte ein benutzerdefiniertes Steuerelement in C # erstellen. Aber jedes Mal, wenn ich mein Steuerelement vollständig neu zeichnen muss, flackert es, selbst wenn ich eine doppelte Pufferung verwende (zuerst zu einem Bild zeichnen und dann blitzen).
Wie beseitige ich das Flimmern, wenn ich es komplett neu zeichnen muss?
Sie könnten versuchen, nach dem Aufruf von InitiliseComponent Folgendes in Ihren Konstruktor einzufügen.
%Vor%BEARBEITEN:
Wenn Sie dies ausprobieren, entfernen Sie, wenn Sie können, Ihren eigenen doppelten Puffercode und lassen Sie das Steuerelement selbst als Antwort auf die entsprechenden virtuellen Methoden zeichnen, die aufgerufen werden.
Ich habe dies aus einem funktionierenden C # -Programm gezogen. Andere Poster haben Syntaxfehler und wurden klar aus C ++ anstelle von C # kopiert %Vor%
Es kann gut genug sein, einfach
aufzurufen %Vor%Das Flackern, das Sie am wahrscheinlichsten sehen, weil Windows zuerst den Hintergrund des Steuerelements zeichnet (via WM_ERASEBKGND) und dann Ihr Steuerelement auffordert, die Zeichnung auszuführen, die Sie tun müssen (über WM_PAINT). Wenn Sie die Hintergrundfarbe deaktivieren und die gesamte OnPaint-Überschreibung ausführen, kann das Problem in 99% der Fälle behoben werden, ohne dass der gesamte für die doppelte Pufferung benötigte Speicher verwendet werden muss.