Einsteigerfrage: Hintergrundfarbe bei Dialogen



  • Hi Leute,

    bevor ihr jetzt schreibt 'guck in die faq',
    das hab ich gemacht und nix gefunden.
    Nun zu meiner Frage:
    Wie verändere ich die hintergrundfarbe in einem dialog?

    ich hab in OnIniDialog geschrieben

    this->GetDC()->SetBkColor(RGB(255,255,255) ); //hintergrund soll weiss
    

    Aber irgendwie passiert nix. Danke im voraus.
    MfG RobRoy



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

    Codeabschnitt muss in die InitInstance.
    Beispiel färbt Background schwarz und Foreground weiß.



  • OnCtlColor überschreiben und ein Brush zurückgeben:

    return GetStockObject(WHITE_BRUSH);
    


  • achja, aus der MSDN

    CWinApp::SetDialogBkColor
    This function is obsolete.

    Remarks
    To set the background color of the dialog box, you must handle WM_CTLCOLOR. This message changes the color of the specified dialog box only.



  • Shlo schrieb:

    achja, aus der MSDN

    CWinApp::SetDialogBkColor
    This function is obsolete.

    Remarks
    To set the background color of the dialog box, you must handle WM_CTLCOLOR. This message changes the color of the specified dialog box only.

    Dank WM_CTLCOLOR habe ich jetzt die Funktion OnCtlColor.
    Darin kann ich auch pDC->SetTextColor(RGB(255, 0, 0)); ausführen.

    Jetzt kann ich zwar die Hintergrundfarbe aller Steuerelemente bestimmen, die Farbe des ganzen Dialoghintergrunds bleibt aber unbeeinflusst.

    Gibt es dafür eine einfache und schnelle Lösung?



  • Einfach und schnell? 😃

    Kannst haben. Ist aber ein PFUSCH!

    Kommt in die OnPaint() (WM_PAINT)
    In den else-Teil

    //Füllfarbe
    COLORREF color = RGB(255,0,0);
    //Zeichenfläche
    CPaintDC dc(this);
    //Zeichenbereich
    CRect rect;
    GetClientRect(&rect);
    //Lienienfarbe
    CPen pen(PS_SOLID,1,color);
    CPen *oldpen = dc.SelectObject(&pen);
    //Flächenfarbe
    CBrush brush(color);
    CBrush *oldbrush = dc.SelectObject(&brush);
    //Zeichne ein Rechteck
    dc.Rectangle(rect);
    //Gib die alten Objecte zurück
    dc.SelectObject(oldpen);
    dc.SelectObject(oldbrush);
    

    BYE 😃



  • Vielen Dank.

    Für meinen Anwendungsfall reicht dies auch erst einmal aus.


Anmelden zum Antworten