Farbige Button



  • Hallo ,
    ich möcte eine dialogbassierende Anwendung schreiben.
    Die verwendeten Buton sollen farbig sein. Wie kann ich das machen.

    Danke für die Hilfe Jack_





  • Es gibt da eine Meldung die aufgerufen wird wenn Objekte gezeichnet werden. Die dazugehörige Message lautet: WM_CTLCOLOR. Du kannst sie mit folgendem Code überschreiben:

    HBRUSH ChimmelDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
        if(pWnd->GetDlgCtrlID() == ID_MYBUTTON)
        {
    	    hbr = CreateSolidBrush(RGB(0, 128, 0));//Button soll grün werden
    	    pDC->SetBkMode(TRANSPARENT);
    	    pDC->SetTextColor(RGB(255, 255, 255));//Schrift soll weiss werden
    	    return hbr;
        }
        else
            return hbr;
    }
    

    Viel Erfolg

    Hierbei ist ID_MYBUTTON die ID deines Buttons. Solltest du nicht wissen wie du die Nachricht generieren/überschreiben kannst, dann melde dich noch einmal. Mit dem Befehl RedrawWindow() kannst du alle Objekte neu zeichnen -> dadurch ist es möglich den Button später z.B. rot werden zu lassen:

    ......
    if( (pWnd->GetDlgCtrlID() == ID_MYBUTTON) && m_bRed)
        {
    	    hbr = CreateSolidBrush(RGB(255, 0, 0));//Button soll rot werden
    
    ....
    


  • Vielen Dank



  • Hi,
    hab das mit einem Textfeld gemacht. Hat auch prima funktioniert. Aber mit dem 2. Code (zur Laufzeit Farbe ändern) komm ich nicht ganz klar. In welche Funktion muss der Code? Und was hat es mit der MenberVariable m_bRed auf sich?
    Gruß Matthias



  • Hi,
    ich hab das jetzt so gemacht aber das funzt einfach nicht.

    HBRUSH CColorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    	// TODO: Attribute des Gerätekontexts hier ändern
        if(pWnd->GetDlgCtrlID() == IDC_EDIT1) 
        { 
            hbr = CreateSolidBrush(RGB(0, 255, 0));//Button soll grün werden 
            pDC->SetBkMode(TRANSPARENT); 
            pDC->SetTextColor(RGB(255, 255, 255));//Schrift soll weiss werden 
            return hbr; 
        }
    
    	if( (pWnd->GetDlgCtrlID() == IDC_EDIT1) && m_bRed) 
        { 
            hbr = CreateSolidBrush(RGB(255, 0, 0));//Button soll rot werden 
    
    		return hbr;
    	}
    
        else 
    
    	// TODO: Anderen Pinsel zurückgeben, falls Standard nicht verwendet werden soll
    	return hbr;
    }
    
    void CColorDlg::OnButton1() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    
    	RedrawWindow();
    }
    

    m_bRed nehm ich mal an is die MemberVariable von Button1.
    Wie muss das Redraw mit der Variable richtig aufgerufen werden damit das 2. if eintritt?
    Gruß Matthias


Anmelden zum Antworten