Hintergrundfarbe in ComboBox klappt nur bedingt.



  • 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



  • Ich rätsel auch noch, wie das im Detail funktioniert. 😞

    Ich vermute, dass was du suchst steckt in dieser Zeile:

    if( nCtlColor == CTLCOLOR_LISTBOX || nCtlColor == CTLCOLOR_EDIT || nCtlColor == CTLCOLOR_MSGBOX )
    

    Ich habe das gerade mal durch die MSDN Suche geschickt, da gibt es einen Artikel, wie man Comboboxen färbt. 🙂
    Wenn du ihn nicht findest Mail mir mal, dann kopier ich ihn raus.



  • bis jetzt habe ich das in der MSDN noch nicht gefunden 😕

    kanst es ja mal schieken.

    MFG TaccoGo


Anmelden zum Antworten