Un bouton auto repeat est un bouton qui lorsque on le maintient enfoncé, il exécute une action en boucle à intervalle de temps donnée. Dès qu'il est relaché l'action est automatiquement stoppée.
En d'autres termes un auto repeat button utilise en interne un minuteur ou timer. Les MFC 2008 implémente pour nous ce button qui est la CMFCButton

1. Dans les resources vous placez votre bouton sur votre boite de dialogue et vous lui mappez une variable à l'aide du Wizard. Vous remplacez CButton en CMFCButton.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
class CMyDlg : public CDialog
{
//..
CMFCButton m_btnAutoRepeat;
2. Dans le OnInitDialog() vous réglez l'intervalle de temps soit toutes les 2 secondes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
m_btnAutoRepeat.SetAutorepeatMode(2000); // 2000 millisecondes
3. Vous devez changer le comportement du clik sur l'auto repeat button.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
m_btnAutoRepeat.m_bResponseOnButtonDown = FALSE; // si TRUE il devient un bouton normal
4. Vous ajoutez un getionnaire de commande répondant à l'évènement BN_CLICK sur le bouton.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
void CMyDlg::OnBnClickedAutoRepeatButton()
{
             // votre code ici commre celui du bouton interrupteur
             // qui alterne son état toute les 2 secondes
 
	m_btnCheck.SetCheck( !m_btnCheck.GetCheck() );
}
La méthode OnBnClickedAutoRepeatButton() est appelé répètitivement toutes les 2 secondes tant que le bouton reste enfoncé.

Pour savoir si notre bouton est en auto repeat mode vous avez la méthode CMFCButton::IsAutorepeatCommandMode

Remarque : Notre bouton auto-repeat n'est qu'un mode qu'on active sur le bouton CMFCButton. Il est très similaire au bouton CStayPressedButton.
Ce qu'ils ont en commun est qu'il exécutent des actions en continue lorsqu'ils sont à l'état enfoncé mais dès le bouton est relaché ou la souris quitte le bouton l'action est arrêtée.
Ces deux diffèrent par le traitement la CMFCButton travaille avec un timer et la CStayPressedButton avec un thread.

Et voilà