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.