Hintergrundfarbe des CView ändern



  • Hallo,

    ich möchte die Hintergrundfarbe meiner SDI-Anwendung von weiß in schwarz ändern. In den FAQ habe ich folgenden Code gefunden:

    BOOL CTest4View::OnEraseBkgnd(CDC* pDC)
    {
    	// TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.
    	CRect r; 
        GetClientRect(&r); 
        CBrush brush(RGB(0,0,0)); 
    
        pDC->FillRect(&r,&brush); 
    
        return CView::OnEraseBkgnd(pDC);
    }
    

    Leider funktioniert das bei mir nicht. Ich habe mit dem Assistenten die obige Nachrichtenbearbeitungsfunktion erstellt, es gab auch keine Compilerfehler. Es sieht so aus als würde der Bildschirm kurz schwarz flackern (habe es auch mit rot (RGB(255,0,0) probiert und es flackerte kurz rot). Wo liegt der Fehler bzw. wann wird denn WM_ERASEBKGND aufgerufen?



  • Spontan würde ich sagen das du das in OnDraw() schreiben musst

    ich vermute das OnEraseBkgnd direkt vor OnDraw aufgerufen wird und das OnDraw dir dann wieder ein weisses Rechteck darüber zeichnet allerdings nur ne vermutung



  • Taelan schrieb:

    Spontan würde ich sagen das du das in OnDraw() schreiben musst

    ich vermute das OnEraseBkgnd direkt vor OnDraw aufgerufen wird und das OnDraw dir dann wieder ein weisses Rechteck darüber zeichnet allerdings nur ne vermutung

    In OnDraw funktioniert das nicht. Ergebnis ist das gleiche wie vorher. Ich habe einmal versucht eine Message abzusenden und ein anderes Mal die Funktion direkt aufgerufen. Ohne Erfolg....



  • mach daraus

    return CView::OnEraseBkgnd(pDC);
    

    mal das

    return TRUE;
    


  • Danke, bin soeben selbst drauf gekommen. Beim Aufruf der Basisklasse

    return CView::OnEraseBkgnd(pDC);
    

    werden die Änderungen ja sofort wieder überschrieben. 😉

    Hätte gleich drauf kommen müssen.....

    Aber trotzdem danke, so funktionierts jetzt richtig:

    BOOL CTest4View::OnEraseBkgnd(CDC* pDC)
    {
        // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.
        CRect r; 
        GetClientRect(&r); 
        CBrush brush(RGB(0,0,0)); 
    
        pDC->FillRect(&r,&brush); 
    
        return TRUE;
    }
    


  • hi

    wisst ihr auch wie man den Hintergrund eines Dialoges (z.b. AboutDlg) ändert?
    wann wird bei einem Dialog "OnEraseBkgnd" ausgeführt?

    gruß
    thinux



  • Ich glaube, immer wenn Invalidate mit TRUE aufgerufen wird.


Anmelden zum Antworten