Button soll nach drücken gedrückt bleiben



  • Hi. Ich versuche jetzt schon seit ca. 2 Stunden einen Button so zu beeinflussen,
    dass er nach einem klick gedrückt bleibt und beim 2ten klick wieder "normal",
    also nicht gedrückt, ist. Leider ist es mir nicht so recht gelungen.
    Kann mir jemand weiterhelfen?



  • Also bei einem Radiobutton kann man den Stil entsprechend setzen, vielleicht geht es ja auch mit einer Checkbox?



  • Die Variante die ich nutze sieht so aus:
    -Eigene (Push-)Buttonklasse erstellen
    -Steuerelementvariable erstellen und eigene Klasse angeben
    -Ownerdraw Style für den Button setzen

    Dann in der eigenen Buttonklasse, hier CPushButton, folgende Funktionen und Handler mit der IDE hinzufügen (ich hoffe es ergibt sich alles aus den Definitionen):

    void CPushButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
    {
    	UINT uStyle = DFCS_BUTTONPUSH;
    
    	if (m_bPushed)
          uStyle |= DFCS_PUSHED;
    
    	// Draw the button frame.
    	::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem, 
    		DFC_BUTTON, uStyle);
    
    	// Get the button's text.
    	CString strText;
    	GetWindowText(strText);
    
    	// Draw the button text using the text color red.
    	::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(), 
    		&lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
    }
    
    void CPushButton::OnBnClicked()
    {
    	m_bPushed = !m_bPushed;
    	Invalidate(FALSE);
    }
    

    Viele Grüße,
    connan.



  • ^Warum so umständlich mit OwnerDraw usw. Nimm doch einfach ne Checkbox und stell die auf PushButton (PushLike) um und schon hast Du deinen hin und herschaltenden Button.

    Gruß Matthias



  • Keine Ahnung 🤡
    Oftmals brauche ich aber Buttons die einfach mehr können, oder ich hab eh schon Buttons und brauch dann nur die Basisklasse umstellen.



  • Danke für die Tipps!
    Ich habe aber eine ander Variante gefunden.

    m_Button.SetState(1); // Button bleit gedrückt
    m_Button.SetState(0); // Button wieder normal



  • Ich habe gerade mitbekommen, dass der gedrückte Knopf nur solange gedrückt bleibt,
    wie er den Focus hat. Also, sobald man ein anderes Steuerelement anklickt ist der
    Button wieder normal. 😞

    Das ist zwar schade, aber ich habe es jetzt mit einer Checkbox hinbekommen.
    Danke nochmal an alle! 😉


Anmelden zum Antworten