Flackern durch Fkt. in OnTimer()??
-
Hi Leute,
ich habe mit SetTimer() einen Timer erzeugt und rufe damit in der Funktion OnTimer() regelmäßig verschiedene Funktionen auf. Die auszuführenden Funktionen sind für das Zeichnen einiger Formen (Kreise) zuständig.
Mir ist aufgefallen, dass Elemente wie Pulldown-Menü oder Schieberegler zu "Flackern" beginnen, wenn man Sie benützt. D.h., wenn ich den Schieberegler verschiebe, springt der Regler immer wieder in eine andere Position. Ich vermute, dass durch die Funktionsaufrufe immer das ganze Dialogfeld neu gezeihnet wird und es deshalb zu diesem Verhalten kommt.
Wie löse ich dieses Problem??
Kommentiere ich die Funktionsaufrufe in der OnTimer() aus, so passt wieder alles.
Schon jetzt danke für eure Antworten,
chiao cha-OS
-
Wie aufwendig ist denn der Code, der im Timer steht?
Weil die Abarbeitung tut ja die Nachrichtenschleife blockieren, bevor es weitergeht. Könnte evtl. damit zusammen hängen
-
Die Funktionen zeichnen verschiedene Kreise, dürfte eigentlich kein Problem sein.
Kann ich das irgendwie Überprüfen?
-
Ich tippe eher auf eine Zeichenroutine, die das gesamte Fenster updatet.
Egal wodurch es passiert, der Code von OnTimer() und den darin verwendeten Funktionen wäre hilfreich.Gruß André
-
Klar ich werde euch natürlich den Code posten! Leider geht das heute nicht mehr!
Aber gleich morgen werd ich das nachholen!Danke,
chiao cha-OS
-
Hab's jetzt doch geschafft, den Code heute noch zu posten. Also zuerst wird eine GIF-Animation geladen:
if(....) { m_Picture.Load("./res/4_directions.gif"); m_Picture.Draw(); } else { m_Picture.Stop(); }
Danach folgt:
CClientDC dc(this); OnMehrere(dc); UpdateData(FALSE); CDialog::OnTimer(nIDEvent);
Wobei OnMehrere() so aussieht:
OnKreise(dc,0,214,30,x1-6,y1-6,x2+6,y2+6); OnKreise(dc,255,240,0,x1-4,y1-4,x2+4,y2+4); OnKreise(dc,255,84,0,x1-2,y1-2,x2+2,y2+2); OnKreise(dc,172,0,0,x1,y1,x2,y2);
Danke für eure Bemühungen,
chiao cha-OS
-
Nur so als Anmerkung: Zeichnen tut man eigentlich in OnPaint... und dann nimmt man einen CPaintDC...
-
-
Ich würde es ganz stark vermuten... es hängt auch vermutlich im OnEraseBkgnd und optionalem Double-Buffering zusammen...
-
Was würdest du für einen Lösungsansatz vorschlagen?? Bin irgendwie ratlos
chiao cha_OS
-
-
Danke Jochen, super Tipp
Sieht ziemlich nach der richtigen Lösung aus, was wär ich nur ohne dieses Forum??chiao cha-OS