Hintergrundfarbe
-
Ich hätte in meinem Fenster gerne eine andere Hintergrundfarbe (selbiges gilt wohl, wenn ich ein Hintergrundbild wöllte). Also habe ich einfach in C..View->OnEraseBkgnd(CDC*) ein großes Rechteck in der entsprechenden Farbe gezeichnet (bzw. würde ich hier das Hintergrundbild zeichnen). Leider wird diese Methode nicht aufgerufen. Beim Starten nicht (was ich eigentlich erwartet hätte) und beim Invalidate() auch nicht. Wann denn dann?
-
also bei mir läuft das ganz wunderbar
siehe als bsp:
BOOL CChildView::OnEraseBkgnd(CDC* pDC) { CRect rect; GetWindowRect(&rect); CDC tdc; if(!BackBitmap.GetSafeHandle()) { CPicture TempBackBitmap; if(m_Setup.BackBitmapPath.IsEmpty() == TRUE) TempBackBitmap.LoadBitmap(IDR_BackBitmap,"jpg"); else TempBackBitmap.LoadBitmap(m_Setup.BackBitmapPath); BackBitmap.CreateBitmap(rect.Width(),rect.Height()); BITMAP BitMap; TempBackBitmap.GetBitmap(&BitMap); if(BitMap.bmWidth < rect.Width() || BitMap.bmHeight < rect.Height()) TempBackBitmap.DrawPicture(&BackBitmap.GetDC(),rect,CPicture::Tiles); else TempBackBitmap.DrawPicture(&BackBitmap.GetDC(),rect,CPicture::Stretch); } pDC->BitBlt(0,0,rect.Width(),rect.Height(),&BackBitmap.GetDC(),0,0,SRCCOPY); return 1; }gruß
-
Hm, also standartmäßig wird ja die Funktion so erzeugt:
BOOL C..View::OnEraseBkgnd(CDC* pDC) { return CView::OnEraseBkgnd(pDC); }Allem Anschein nach hat sie so false zurückgegeben und es ging deswegen nicht. Wenn ich einfach 1 zurückgeben, funktioniert es.
-
Evolver schrieb:
Hm, also standartmäßig wird ja die Funktion so erzeugt:
BOOL C..View::OnEraseBkgnd(CDC* pDC) { return CView::OnEraseBkgnd(pDC); }Allem Anschein nach hat sie so false zurückgegeben und es ging deswegen nicht. Wenn ich einfach 1 zurückgeben, funktioniert es.
Das ist so nicht ganz richtig, die gibt schon true zurück. Aber schau mal an was da gemacht wird. Wenn Du die überschreibst malst Du erst Dein Rechteck und rufst dann die Methode der Basisklasse auf. Die Basisklasse ist CView und alle CViews haben per default einen weißen Hintergrund. Somit wird Dein farbiges Rechteck damit wieder übermalt. Auf langsamen Rechnern müsste man ein leichtes Flackern sehen.
Da der Rückgabewert der Funktion vom Typ BOOL ist siehts schöner aus wenn Du true zurückgibst, obwohls ja auch 1 ist.