Wie funktioniert OnEraseBkgnd ?



  • Hallöchen!

    Kann mir mal jemad erklären was es mit dieser Methode auf sich hat?
    Damit kann man doch die Farbe eines Feldes transparent machen mit z b. diesem Code:

    BOOL CVersuch8View::OnEraseBkgnd(CDC* pDC) 
    {
    
        pDC->SetBkMode(TRANSPARENT);
    	return TRUE;
    }
    

    Ich habe gelesen, dass diese Methode verwendet wird um ein Flackern zu verhindern-was für ein Flackern? Was passiert da genau?

    Vielen Dank für eine Antwort



  • Hi,

    wie der Name der Funktion schon sagt, ist die Standardimplementation der
    Methode den Hintergrund zu löschen.
    Windows ruft diese Funkion immer auf, wenn der Hintergrund gelöscht werden
    soll, und zeichnet dann den Bereich des Fensters mit der Hintergrundfarbe
    (meistens weiss, wenn nicht anders in dem CreatStruct des Fensters).
    Da meistens der Inhalt des Fensters in OnPaint gezeichnet wird, ist es oft
    ratsam, in OnEraseBackground einfach TRUE zurückzuliefern. Das Bedeutet
    für das Betriebssystem: Alles Klar, Hintergrund ist gelöscht rufe jetzt OnPaint
    auf.
    Stell dir vor in OnPaint zeichnest du alles Blau und ein paar rote Quadrate
    ( miese Farben aber egal 😋 ).
    Wenn OnEraseBackground nun erst alles Weiss zeichnet und OnPaint dann alles
    Blau mit den Quadraten, gibt es einen leichten Flackereffekt für den Anwender.
    Um das zu vermeiden, zeichnet man in OnEraseBackground nichts, liefert
    TRUED zurück und erledigt dann das Zeichnen in OnPaint.

    Gruss
    EB



  • Hallo EB!

    Vielen vielen Dank!
    Wenn ich so lese, klingt das richtig logisch, aber wenn man es selber so mal formulieren soll, fällt mir das so schwierig.
    Also Dankeschön
    (ich werde das zeichnen aus der Methode herausnehmen)
    nina
    🙂


Anmelden zum Antworten