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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.