Dialog - MFC Dialog färben



  • Hey,
    Ich quäle mich jetzt schon seid längerem damit herum den Hintergrund meiner Anwendung (MFC, Dialog) schwarz zu färben. Alle Infos die ich gefunde haben benutzen dazu WM_CTL_COLOR. bei mir färben sich dann jedoch nur alle Elemente z.B. statics, buttons etc auf meiner hintergrundfläche. Aber die eigentliche Fläche bleibt Windowsgrau. Wo liegt mein Fehler?

    P.S. Ich hab mir die Faqs schon angeschaut.



  • @Daishy

    Poste doch mal etwas Source-Code... OnCtlColor Funktion zum Beispiel.

    MfG veganza



  • const COLORREF HINTERGRUNDZF=RGB(255,250,247);
    HBRUSH CReg1::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
        pDC->SetBkColor(HINTERGRUNDZF);
    }
    
    oder
    HBRUSH CTest2Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
            HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
        pDC->SetTextColor(RGB(255,255,255));
        pDC->SetBkColor(RGB(255,0,0));
    
    return hbr;
    }
    

    Die sachen die ich in Faq, tutorials etc gefunden hab, waren alle gleich oder nur mit einem unterschiedlichen Befehl in einer Zeile. Aber damit krieg ich den besagten Hintergrund nicht gefärbt.



  • @Daishy

    Ok !!!

    WM_CTLCOLOR wird von Controls (Button, Static o.ä.) beim Neuzeichnen (Redraw) aufgerufen.

    Da Du in Deiner OnCtlColor nicht auf die einzelnen Control's eingehst, verweundert mich das nicht, daß nur Deine Buttons sich färben 😉

    IMHO kannst Du mittels

    pDC->SetBkColor(RGB(255,0,0))
    

    nur auf Controls zugreifen aber nicht auf den Dialog.

    Versuchen Wir das mal so:

    1. Lege eine Member-Variable in Deinem Dialog an

    CBrush m_brush;

    2. In der OnInitDialog weißt Du diesem m_brush eine Farbe zu

    m_brush.CreateSolidBrush(RGB(0, 0, 0)); // Für Schwarz

    3. Erweitere Deine OnCtlColor() Funktion etwas

    HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        switch (nCtlColor) 
        {
        case CTLCOLOR_STATIC:  // Für alle Statics          
                pDC->SetTextColor(gewünschte Farbe);
                pDC->SetBkColor(gewünschte Farbe);
    
        case CTLCOLOR_DLG:     // Für den Dialog            
                return (HBRUSH)m_brush;
    
        default:
                return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
        }
    }
    

    Hoffe das dieser Code funktioniert... sonst muß ich doch mal mein MSDEV anschmeißen 😉

    MfG veganza

    [ Dieser Beitrag wurde am 10.08.2002 um 17:51 Uhr von veganza editiert. ]



  • Was eigentlich auch funktionieren müßte:

    In der InitInstance()

    SetDialogBkColor(RGB(0, 0, 0), RGB(255, 255, 255));
    

    Sollte dauerhaft den Hintergrund auf schwarz (1. Parameter) und die Schrift auf weiß (2. Parameter) setzen !!!

    MfG veganza




Log in to reply