InvalidateRect



  • Guten Morgen,
    ich wollte gerne wissen, ob es nicht noch eine schönere Lösung gibt, einen Bereich eines Dialoges neuzeichnen zu lassen.

    Bisher mache ich das so, dass ich den Clientbereich nehme und dann diese Grösse verändere:

    CRect bereich;
    	GetClientRect(&bereich);	
    	bereich.InflateRect(-275,-150,650,-150);
    
             InvalidateRect(bereich);
    

    Ich würde aber lieber ein Rechteck direkt angeben können, dann verfällt das Umrechnen in die gewollten Koordinaten. Z.B. so:

    CRect bereich (200,400,700,400);
    
             InvalidateRect(bereich);
    

    Doch das will nicht funktionieren. Warum nicht? Fehlt da irgendwie ein Handle für den Clientbereich? Einen geeigneten Konstruktor habe ich nicht finden können. Hat jemand noch eine Idee? 😕
    Danke.



  • Ok, noch ein Problem:

    Nun will ich 2 Rechtecke neuzeichnen lassen. Alles in einem Dialog.
    Im ersten Rechteck will ich ein

    InvalidateRect(&rect1, true)
    

    machen,
    jedoch im Zweiten ein

    InvalidateRect(&rect2, false)
    

    ! Da im zweiten Rechteck eine Bitmap mittels Doublebuffering aktualisiert wird, um das Flackern zu vermeiden.
    Ich habe die beiden Rechtecke übereinander. Wenn ich nur den ersten Befehl ausführe und den Zweiten auskommentiere, dann ist alles in Ordnung. Die Bitmap flackert nicht und das Diagramm (im ersten Rechteck) wird aktualisiert.
    Nehme ich nur den zweiten Befehl, dann wird die Bitmap aktualisiert (ich zeichne hinein), und das Diagramm nicht. Nichts flackert.
    Das sagt mir, dass die Rechtecke schön voneinander getrennt sind und unabhängig aktualisiert werden, so wie es sein sollte 🙂 .
    Nehme ich aber nun beide Befehle, dann flackert es! 😮

    Weiss jemand warum?



  • Ok,

    InvalidateRect (&irgendwas, true)
    

    löscht den ganzen Hintergrund, nicht nur den, des Rechtecks. 😞


Anmelden zum Antworten