Hintergrundfarbe von CButton ändern



  • Hi,

    ich würde gerne die Hintergrundfarbe eines CButtons ändern. Beim googeln komme ich auf Beschreibungen der Art, dass ich mit dieser Methode einfach einen Brush mit der neuen Hintergrundfarbe zurück gebe:

    HBRUSH SC_Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        if (nCtlColor==CTLCOLOR_BTN)
        {
           return (HBRUSH)(m_brush.GetSafeHandle());
        }
        else return CDialog::OnCtlColor(pDC,pWnd,nCtlColor);
    }
    

    oder aber in einer von CButton abgeleiteten Klasse sowas mache:

    HBRUSH SC_DlgButton::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        if (nCtlColor==CTLCOLOR_BTN)
        {
           return (HBRUSH)(m_brush.GetSafeHandle());
        }
        else return CButton::OnCtlColor(pDC,pWnd,nCtlColor);
    }
    

    Das ganze hat nur den Nachteil, dass es bei Checkboxen etc. problemlos funktioniert, nur bei diesen CButtons nicht - und die ergoogelten Beispiele zeigen den Code auch alle in Zusammenhang mit anderen Elementen.

    Wie geht es also für einen CButton wirklich?

    Colr





  • Danke für die Antwort, nur leider passt sie nicht zu meiner Frage 😕



  • Colr schrieb:

    Danke für die Antwort, nur leider passt sie nicht zu meiner Frage 😕

    Doch, die bleibt nichts anderes als es mit OwnerDraw zu machen.
    Original Auszug aus der Microsoft-FAQ

    How do I change the background color of a button?

    Note: the method in "How do I change the background color of a control?" will not work for buttons!

    If you want to change the color of a dialog button, you have to use an owner-draw button. (You can use bitmap buttons.) Changing the color through OnCtlColor() will not work for buttons. The following Knowledge Base articles may be of help to you: Q32685, "Using the WM_CTLCOLOR Message," and Q64328, "SAMPLE: Owner-Draw: 3-D Push Button Made from Bitmaps with Text." This article explains sample code for a owner-draw button.

    Ramesh (NetQuest), MSMFC, 8/3/95

    http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dnarvc/html/msdn_mfcfaq50.asp



  • Hallo,

    Buttons färben ist eigentlich gar nicht schwer!

    Du fügst in deinem Projekt im ^Class Wizard die WM_CTLCOLOR hinzu.

    In der kannst Du dann die Buttons färben

    Beispiel:

    HBRUSH CDlgLanguage::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    	switch(pWnd->GetDlgCtrlID())
    	{
    	case IDC_BUTTON_A1:
    		{
    		pDC->SetTextColor(RGB(0,0,0));
    
    		return m_brush_yellow;
    
    		}...
    

    hbr ist der Standard "Brush". Willst Du das ein bestimmter Button eine andere Farbe hat, musst über

    pWnd->GetDlgCtrlID()
    

    und

    case IDC_BUTTON_A1:
    

    das aktuelle Kontroll Element abfragen, und dann einen anderen Brush zurückgeben mit dem gfezeichnet werden soll. Quasi musst Du dem Compiler immer den passenden Pinsel und Farbeimer für die Controll Elements bereitstellen.

    die Brushes deklarierst Du in der OnInitDialog:

    //Brush für Buttons inaktiv: White
    	m_brush_white.CreateSolidBrush(RGB(255, 255, 255));
    		//Brush für Buttons aktiv: Yellow
    	m_brush_yellow.CreateSolidBrush(RGB(255, 255, 0));
    

    über:

    if (nCtlColor == (UINT)CTLCOLOR_BTN) // 
        {       
            pDC->SetTextColor(RGB(0,0,0 ));      // ** Textfarbe ** 
            pDC->SetBkMode(OPAQUE);				// Modus:bei Transparent wird Set BK Color ingnoriert
    		pDC->SetBkColor(RGB(255,255,255 ));	// ** Hintergrundfarbe ** 
    
    		return m_brush_white;
    	}
    

    kannst Du allen Buttons eine Farbe zuweisen (in dem Fall weiß)



  • Ups, da schein ich nen uralten Artikel erwischt zu haben 🙄



  • monne81 schrieb:

    Buttons färben ist eigentlich gar nicht schwer!

    Wie schon geschrieben kenne ich diese Methode - allerdings funktioniert die für alle Elementtypen AUSSER CButtons. Labels, Comboboxen Eingabefelder etc. lassen sich damit prima färben, nur die CButtons sind resistent dagegen.



  • Colr schrieb:

    monne81 schrieb:

    Buttons färben ist eigentlich gar nicht schwer!

    Wie schon geschrieben kenne ich diese Methode - allerdings funktioniert die für alle Elementtypen AUSSER CButtons. Labels, Comboboxen Eingabefelder etc. lassen sich damit prima färben, nur die CButtons sind resistent dagegen.

    Hast du das Beispiel von monne81 mal versucht? Hier wird nämlich pDC->...
    aufgerufen, was bei dir anscheinend nicht der Fall ist.



  • Ja, ich habe es mir noch mal komplett kopiert - kein Erfolg.



  • Colr schrieb:

    Ja, ich habe es mir noch mal komplett kopiert - kein Erfolg.

    Dann fällt mir da spontan nix ein. Alternativ wäre halt nur noch die OwnerDraw Methode machbar.
    Kann es im moment leider auch nicht selbst versuchen. Wäre erst heute abend möglich


Anmelden zum Antworten