[FAQ][VC++]Comment créer un bouton interrupteur à partir d'une check box
Pour créer un bouton interrupteur, il suffit d'ajouter une variable de type CMFCButton associé au contrôle check box de la toolbox que nous plaçons sur notre boite de dialogue.
Ensuite nous lui associons deux petites images qui correspondent à ces deux états par exemple allumer-éteindre ou on-off ou vrai-faux etc.
1. En ajoutant une variable associé au check box à l'aide du Wizard nous remplaçons CButton en CMFCButton.
Code:
1 2 3 4 5 6
|
class CMyDlg : public CDialog
{
// ....
CMFCButton m_btnCheck; // bouton associé au check box
//... |
2. Dans la méthode OnInitDialog() nous initialisons le bouton ainsi :
Code:
1 2 3 4 5
|
m_btnCheck.m_nFlatStyle = CMFCButton::BUTTONSTYLE_3D; // pour donner le style au bouton
m_btnCheck.SetImage(afxGlobalData.bIsOSAlphaBlendingSupport ? IDB_CHECKNO32 : IDB_CHECKNO); // définit l'image à l'état non coché
m_btnCheck.SetCheckedImage(afxGlobalData.bIsOSAlphaBlendingSupport ? IDB_CHECK32 : IDB_CHECK);// définit l'image à l'état coché
m_btnCheck.SizeToContent(); // redimensionne le bouton |
Les IDB_XXX32 sont des bitmap sur 32 bits et l'on doit vérifier si l'OS Alpha Blending supporte ces bitmaps en appelant afxGlobalData.bIsOSAlphaBlendingSupport
3. Dans une méthode de notre boite nous avons
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
void CMyDlg::OnSomeMethod()
{
if( m_btnCheck.GetCheck() )
{
//...
}
else
{
//...
}
} |
Et donc vous avez un joli bouton interrupteur qui reste enfoncé lorsque l'on click une fois et retrouve sont état normal au click suivant.
:D