Hintergrundfarbe von CView ändern...



  • Hiho.

    Weiss jemand, wie man die Hintergrundfarbe von CView ändern kann? Ich möchte lieber blau statt weiss haben. Kann man das irgendwie machen??

    thx & cu



  • Hi,

    das ist ganz einfach. Du muss fur das Fenster eine neue Funkcion "OnEraseBkgnd" herstellen und mit den folgeden Zeile anfüllen:

    // Set brush to desired background color
    CBrush backBrush(RGB(192, 192, 192));

    // Save the old brush
    CBrush* pOldBrush = pDC->SelectObject(&backBrush);

    // Get the current clipping boundary
    CRect rect;
    pDC->GetClipBox(&rect);

    // Erase the area needed
    pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),
    PATCOPY);

    pDC->SelectObject(pOldBrush); // Select the old brush back
    return TRUE; // message handled

    Die originale Zeilen kannst du abwischen. Sorry, aber meine deutche Sprache ist nicht sehr gut.

    Fredy

    MSDN:
    HOWTO: How to Make the CMiniFrameWnd Window Paint Its Background Area
    ID: Q135884
    method 2



  • hi.

    erstmal dank für deine hilfe!!!

    ich ahbe jetzt in CView diese Funktion eingbaut:

    bool CVIDCAPView::OnEraseBkgnd(CDC* pDC)
    {
    CWnd::OnEraseBkgnd(pDC);
    CBrush backBrush(RGB(0, 0, 0));
    CBrush* pOldBrush = pDC->SelectObject(&backBrush);
    CRect rect;
    pDC->GetClipBox(&rect);
    pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
    pDC->SelectObject(pOldBrush);
    return TRUE;
    }

    Ich rufe noch die CWnd-Funktion auf. Ist das ok oder überhaupt noch nötig? Naja bei dem Quelltext oben habe ich leider immer noch ein weisses Fenster 😞
    Was hab ich falsch gemacht?? 🙂

    thx & cu
    -bunti



  • Überprüfe mal, welchen Wert

    pDC->GetClipBox(&rect);
    

    zurückgibt.
    Vielleicht will das nicht?!? Ist nur so eine Idee.
    Unter http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cdc.3a3a.getclipbox.asp findest du, welche Werte zurückgegeben werden können.


Anmelden zum Antworten