Dialog fenster ruckelt bei OnCtlColor



  • Hallo,
    ich habe versucht ein Indikatorfeld im Dialog anzulegen, welches sich rot färben soll wenn ein Signal anliegt. Ich rufe zum umfärben jedesmal die Funktion OnCtlColor auf. Dummerweise ruckelt das ganze Fenster immer ziemlich stark. Gibt es eine bessere Möglichkeit ein Indikatorfeld anzulegen?
    Gruss Bronko



  • ja der bessere Weg ist meines erachtens wenn du ein Static nimmst dir eine eigene Klasse von CStatic abgeleitet erstellst, dann in der OnPaint deiner Klasse die entsprechende Farbe zeichnest und der Zeichenprozess über Invalidate() deiner eigenen Klasse anschiebst. Gezeichnet wird dann nur wenn du das anschiebst oder Windows der meinung ist das ein Neuzeichnen nötig ist. OnCtlColor() an sich aufzurufen ist genau so falsch wie direkt die OnPaint aufzurufen, beides wird ausschließlich über Windowsnachrichten aufgerufen.

    oder halt die farbänderung über OnCtlColor() machen aber dann zumindest Invalidate() zum Neuzeichnen aufrufen.


  • Mod

    Das Problem ist auch oft das WM_ERASEBGKND.
    Das löscht Dein Control immer hganz mit der Hintergrundfarbe. Evtl. kann Dir hier ein CMemDC helfen und das der Hintergrund auch in OnPaint gezeichnet wird.

    PS: Ich hoffe nicht, dass Du OnCtlColor aufrufst. für das neuzeichnen musst Du Invalidate oder RedrawWindow verwenden. Verwendest Du RedrawWindow hat dies den Vorteil, dass der Update sofort erfolgt. Auch das kann Flackern verhindern.



  • Danke für die Vorschläge. Kann mir noch Jemand eine kleinen Beispielcode hinzufügen?


  • Mod

    Schau in Tante Google nach CMemDC, und RedrawWindow ist in der MSDN beschrieben.
    Was für Beispiele erwartest Du noch?


Anmelden zum Antworten