Hintergrundfarbe in ComboBox klappt nur bedingt.



  • Ich habe die Hintergrundfarbe meiner ComboBox geändert. (über OnCtlColor())
    Klappt auch wunderbar, solange Typ auf Dropdown ist.
    Ist der Typ auf Dropdown-Listenfeld (und das benötige ich, da der User nicht ändern können soll) ist die Box weiß. Alles was ich aufklappe bekommt meine Farbe, nur der erste Eintrag nicht.
    Wie kann ich das ändern?



  • Hallo ich habe versucht die Combobox farblich zu hinterlegen!

    Leider schaffe ich es nur den Rahmen farblich zu machen!

    Hier mein Code in der OnCTLcolor

    ... Wenn DLG-ID dann mach das ->

    ::DeleteObject( hbr );
    int dRowColor = DCRGBWert::getColorRef(STR_COLOR_RED);
    hbr = ::CreateSolidBrush(dRowColor);
    pDC->SetBkColor(dRowColor);
    return hbr;



  • Hallo
    ich habe in meiner Dropdown-Listenfeld eine hiter grund farbe... aber ungewolt
    bei mir habe ich auch mit OnCtlColor() die hintergrund farbe eines CEdit geandert und und die farbe habe ich nun im der ComboBox. möchte ich aber nicht.

    MFG TaccoGo



  • ich habs so gemacht.

    Public Variablen:

    CBrush white_brush;
    CBrush listen_farbe;
    

    Im Konstrukter farbe setzen:

    listen_farbe.CreateSolidBrush(0x00E5E6E6);
    white_brush.CreateSolidBrush(RGB(255,255,255));
    

    In OnCtlColor die Farben nach belieben setzen

    HBRUSH CMeinProg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);    
        switch (nCtlColor) 
        { 
        case CTLCOLOR_EDIT: 
            if(pWnd->GetDlgCtrlID() == IDC_USER || pWnd->GetDlgCtrlID() == IDC_PASSWORT || pWnd->GetDlgCtrlID() == IDC_CHATMSG)
    		{
                pDC->SetBkMode(TRANSPARENT);        
                hbr = (HBRUSH)white_brush;            // Setzt die Farbe für den Hintergrund    
            } 
            break; 
        case CTLCOLOR_LISTBOX:  
    		pDC->SetBkMode(TRANSPARENT); 
    		pDC->SetDCBrushColor(0x00E5E6E6);
            hbr = (HBRUSH) white_brush;        // Setzt die Farbe für den Hintergrund       
            break;
    	case CTLCOLOR_STATIC:
    		pDC->SetBkMode(TRANSPARENT);
    		hbr = (HBRUSH) listen_farbe;
    		break;
    	case CTLCOLOR_DLG:
    		pDC->SetBkMode(TRANSPARENT);
            hbr = (HBRUSH) m_Brush;
    		break;
    	default:
    		pDC->SetBkMode(TRANSPARENT);
    		hbr = (HBRUSH) listen_farbe;
    		break;
        } 
        return hbr;
    }
    


  • Trikor schrieb:

    ich habs so gemacht.

    Public Variablen:

    CBrush white_brush;
    CBrush listen_farbe;
    

    Im Konstrukter farbe setzen:

    listen_farbe.CreateSolidBrush(0x00E5E6E6);
    white_brush.CreateSolidBrush(RGB(255,255,255));
    

    In OnCtlColor die Farben nach belieben setzen

    HBRUSH CMeinProg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);    
        switch (nCtlColor) 
        { 
        case CTLCOLOR_EDIT: 
            if(pWnd->GetDlgCtrlID() == IDC_USER || pWnd->GetDlgCtrlID() == IDC_PASSWORT || pWnd->GetDlgCtrlID() == IDC_CHATMSG)
    		{
                pDC->SetBkMode(TRANSPARENT);        
                hbr = (HBRUSH)white_brush;            // Setzt die Farbe für den Hintergrund    
            } 
            break; 
        case CTLCOLOR_LISTBOX:  
    		pDC->SetBkMode(TRANSPARENT); 
    		pDC->SetDCBrushColor(0x00E5E6E6);
            hbr = (HBRUSH) white_brush;        // Setzt die Farbe für den Hintergrund       
            break;
    	case CTLCOLOR_STATIC:
    		pDC->SetBkMode(TRANSPARENT);
    		hbr = (HBRUSH) listen_farbe;
    		break;
    	case CTLCOLOR_DLG:
    		pDC->SetBkMode(TRANSPARENT);
            hbr = (HBRUSH) m_Brush;
    		break;
    	default:
    		pDC->SetBkMode(TRANSPARENT);
    		hbr = (HBRUSH) listen_farbe;
    		break;
        } 
        return hbr;
    }
    

    Hi ich habe das gerade versucht!
    Wo kommt diese Methode her?
    pDC->SetDCBrushColor(0x00E5E6E6);



  • Das ist eine Standardmethode von pDC.

    Wenn Du pDC-> eingibst, öffnet sich dein Vervollständigungsfenser.
    Da ist es schon drin.
    Zumindest unter C++.NET

    Siehe auch MSDN.

    MFC Library Reference
    CDC::SetDCBrushColor

    Sets the current device context (DC) brush color to the specified color value.

    COLORREF SetDCBrushColor(
    COLORREF crColor
    );
    Parameter
    crColor
    Specifies the new brush color.
    Return Value

    Nonzero if the function is successful; otherwise 0.
    Remarks

    This member function emulates the functionality of the function SetDCBrushColor, as described in the Platform SDK.



  • Das hat denselben Effekt wie bei mir!

    Die Combobox ist vom Rahmen her Farblich! Der Inhalt bleibt weiss!

    Es sollte aber die ganze Combobox Farblich sein!



  • Na dann änder doch einfach die farben von white_brush.

    statt

    white_brush.CreateSolidBrush(RGB(255,255,255));
    

    machst du

    white_brush.CreateSolidBrush(RGB(255,0,0));
    

    und siehe da es werde rot.



  • Trikor schrieb:

    Na dann änder doch einfach die farben von white_brush.

    statt

    white_brush.CreateSolidBrush(RGB(255,255,255));
    

    machst du

    white_brush.CreateSolidBrush(RGB(255,0,0));
    

    und siehe da es werde rot.

    Hast du das ganze mal mit einer Combobox versucht?
    Wie gesagt der Rahmen geht! Der Rest nicht!



  • Stell mal in den eigenschaften von Dropdown-Listenfeld auf Dropdown.

    Dann ist es komplett farbig.

    Bei Dropdown-Listenfeld ist leider der erste Eintrag immer weiß, alle anderen farbig.
    Aber das war ja auch mein Problem aus dem ursprünglichen posting.

    Weil ich nun ein Dropdown-Listenfeld in meiner Combobox benötige, lasse ich diese weiß.



  • Trikor schrieb:

    Stell mal in den eigenschaften von Dropdown-Listenfeld auf Dropdown.

    Dann ist es komplett farbig.

    Bei Dropdown-Listenfeld ist leider der erste Eintrag immer weiß, alle anderen farbig.
    Aber das war ja auch mein Problem aus dem ursprünglichen posting.

    Weil ich nun ein Dropdown-Listenfeld in meiner Combobox benötige, lasse ich diese weiß.

    Die Combobox hat als Type Dropdown und nicht DropList!

    Es funktioniert nicht!



  • bekommst du irgendeine fehlermeldung?

    Wenn ja, dann welche.

    Wenn nein, dann poste mal Code vom Konstruktor und von OnCtlColor.



  • Trikor schrieb:

    bekommst du irgendeine fehlermeldung?

    Wenn ja, dann welche.

    Wenn nein, dann poste mal Code vom Konstruktor und von OnCtlColor.

    //Id der Combobox
    if ( DlgCtrlID == IDC_VPD_WERT_BOX )
    {
    //Alter brush gelöscht
    ::DeleteObject( hbr );
    int dRowColor = DCRGBWert::getColorRef(STR_COLOR_RED);
    hbr = ::CreateSolidBrush(dRowColor);
    pDC->SetBkColor(dRowColor);
    return hbr;
    }



  • In der OnCtlColor mußt du schon die übergebenen Variablen und Pointer nutzen.
    Dementsprechend muß deine if-Anweisung so lauten.

    if(pWnd->GetDlgCtrlID() == IDC_VPD_WERT_BOX)
    {
      CBrush  brRed;
      brRed.CreateSolidBrush(RGB(255,0,0)); 
      pDC->SetDCBrushColor(brRed));
      pDC->SetBkColor(brRed);
      hbr = (HBRUSH) brRed;
    }
    return hbr;
    

    ist nicht getestet sollte aber funktionieren.



  • Hallo,

    die funktion SetDCBrushColor()
    get die nur in .net oder bekomme ich das auch in VC++6.0 hin?

    MfG TaccoGo



  • kann ich dir leider nicht sagen.
    Aber lass sie mal weg, dann müßte der Hintergrund trotzdem rot sein.
    Der Rand hat dann halt die Systemfarbe, dürfte aber eigentlich nicht weiter schlimm sein.



  • get aber nicht?

    if (pWnd->GetDlgCtrlID()== IDC_COMBO2||pWnd->GetDlgCtrlID()== IDC_COMBO1||pWnd->GetDlgCtrlID()== IDC_annoJustify) 
    		{     
    
    			pDC->SetTextColor(RGB(0,0,0));
    			pDC->SetBkColor(RGB(255,255,255));
                hbr = (HBRUSH)white_brush;            
    		}
    

    es bleibt bei mir schwartz und ich möchte es weiss haben

    MFG TaccoGo



  • ich habe gerade festgestelt das wen du pDC->SetBkColor() benutzt dan dien ziel erreichst.

    aber wen man aufklap dan hat es die falsche farbe.

    MFG TaccoGo



  • weis den nimand wie die farbe der combobox für das aufgeglapte(wo alle möglichen wahlmöglichkeiten stehen) änder kann?

    MFG TaccoGo



  • Hi, ich habe gerade wegen meinem Färberoblem bei Edits rumgesucht und das hier gefunden:
    http://www.codeproject.com/miscctrl/colorcontols.asp

    Im Demoprojekt ist auch die Klappliste rot. 🙂

    Hoffe es hilft.



  • der macht doch in siener klasse nichts anders als ich... nur ich ohne klasse?

    aber wo Klappliste färbt der die Klappliste?

    MFG TaccoGo


Anmelden zum Antworten