Messages de bouton
Un bouton peut envoyer des messages à sa fenêtre parente, et une fenêtre parente peut envoyer des messages à un bouton.
Les rubriques suivantes sont traitées dans cette section.
- Envoi de messages aux boutons
- Gestion des messages à partir d’un bouton
- Messages de notification provenant de boutons
- Messages de couleur de bouton
- Traitement des messages par défaut du bouton
- Rubriques connexes
Une fenêtre parente peut envoyer des messages à un bouton dans une fenêtre enfant ou superposée à l’aide de la fonction SendMessage , ou envoyer des messages à un bouton d’une boîte de dialogue à l’aide des fonctions SendDlgItemMessage, CheckDlgButton, CheckRadioButton et IsDlgButtonChecked .
Une application peut utiliser le message BM_GETCHECK pour récupérer l’état case activée d’une zone de case activée ou d’une case d’option. Une application peut également utiliser le message BM_GETSTATE pour récupérer les états actuels du bouton (état case activée, état push et état focus). Pour obtenir des informations sur un état spécifique, utilisez un masque de bits sur la valeur d’état retournée.
Le message BM_SETCHECK définit l’état case activée d’une case d’case activée ou d’une case d’option ; le message retourne zéro. Le message BM_SETSTATE définit l’état d’envoi d’un bouton ; ce message retourne également zéro. Le message BM_SETSTYLE modifie le style d’un bouton. Il est conçu pour modifier les styles de bouton au sein d’un type (par exemple, changer une zone de case activée en zone de case activée automatique). Il n’est pas conçu pour le changement d’un type à l’autre (par exemple, la modification d’une zone de case activée en case d’option). Une application ne doit pas modifier un bouton d’un type à un autre.
Un bouton du style BS_BITMAP ou BS_ICON affiche une bitmap ou une icône au lieu du texte. Le message BM_SETIMAGE associe un handle à une bitmap ou une icône à un bouton. Le message BM_GETIMAGE récupère un handle à la bitmap ou à l’icône associée à un bouton.
Une application peut également utiliser le message DM_GETDEFID pour récupérer l’identificateur du contrôle de bouton push par défaut dans une boîte de dialogue. Une application peut utiliser le message DM_SETDEFID pour définir le bouton pousseur par défaut d’une boîte de dialogue.
Appeler la fonction CheckDlgButton ou CheckRadioButton revient à envoyer un message BM_SETCHECK . Appeler la fonction IsDlgButtonChecked revient à envoyer un message BM_GETCHECK .
Les notifications à partir d’un bouton sont envoyées sous forme de messages WM_COMMAND ou WM_NOTIFY . Vous trouverez des informations sur le message utilisé dans la page de référence pour chaque notification.
Pour plus d’informations sur la gestion des messages, consultez Contrôler les messages. Voir aussi Messages de bouton.
Lorsque l’utilisateur clique sur un bouton, son état change et le bouton envoie des codes de notification, sous forme de messages WM_COMMAND , à sa fenêtre parente. Par exemple, un contrôle de bouton push envoie le code de notification BN_CLICKED chaque fois que l’utilisateur choisit le bouton. Dans tous les cas (à l’exception de BCN_HOTITEMCHANGE), le mot d’ordre inférieur du paramètre wParam contient l’identificateur de contrôle, le mot d’ordre supérieur de wParam contient le code de notification et le paramètre lParam contient le handle de la fenêtre de contrôle.
Le message et la réponse de la fenêtre parente dépendent du type, du style et de l’état actuel du bouton. Voici les codes de notification de bouton qu’une application doit surveiller et traiter.
Code de notification | Description |
---|---|
BCN_HOTITEMCHANGE | La souris a entré ou quitté la zone cliente d’un bouton. |
BN_CLICKED | L’utilisateur a cliqué sur un bouton. |
BN_DBLCLK ou BN_DOUBLECLICKED | L’utilisateur a double-cliqué sur un bouton. |
BN_DISABLE | Un bouton est désactivé. |
BN_PUSHED ou BN_HILITE | L’utilisateur a poussé un bouton. |
BN_KILLFOCUS | Le bouton a perdu le focus du clavier. |
BN_PAINT | Le bouton doit être peint. |
BN_SETFOCUS | Le bouton a obtenu le focus du clavier. |
BN_UNPUSHED ou BN_UNHILITE | Le bouton n’est plus enfoncé. |
Un bouton envoie les codes de notification BN_DISABLE, BN_PUSHED, BN_KILLFOCUS, BN_PAINT, BN_SETFOCUS et BN_UNPUSHED uniquement s’il a le style BS_NOTIFY . BN_DBLCLK codes de notification sont envoyés automatiquement pour les boutons BS_USERBUTTON, BS_RADIOBUTTON et BS_OWNERDRAW . Les autres types de boutons envoient BN_DBLCLK uniquement s’ils ont le style BS_NOTIFY . Tous les boutons envoient le code de notification BN_CLICKED , quel que soit leur style de bouton.
Pour les boutons automatiques, le système modifie l’état d’envoi et peint le bouton. Dans ce cas, l’application traite généralement uniquement les codes de notification BN_CLICKED et BN_DBLCLK . Pour les boutons qui ne sont pas automatiques, l’application répond généralement au code de notification en envoyant un message pour modifier l’état du bouton. Pour plus d’informations sur l’envoi de messages aux boutons, consultez Envoi de messages aux boutons.
Lorsque l’utilisateur sélectionne un bouton dessiné par le propriétaire, le bouton envoie à sa fenêtre parente un message WM_DRAWITEM contenant l’identificateur du contrôle à dessiner et des informations sur ses dimensions et son état.
Le système fournit des valeurs de couleur par défaut pour les boutons. Une application peut récupérer les valeurs par défaut de ces couleurs en appelant la fonction GetSysColor ou définir les valeurs en appelant la fonction SetSysColors . Le tableau suivant présente les valeurs de couleur de bouton par défaut.
Valeur | Élément de couleur |
---|---|
COLOR_BTNFACE | Visages de bouton. |
COLOR_BTNHIGHLIGHT | Mettez en surbrillance la zone (bord supérieur et gauche) d’un bouton. |
COLOR_BTNSHADOW | Zone d’ombre (bords inférieur et droit) d’un bouton. |
COLOR_BTNTEXT | Texte normal (non disponible) dans les boutons. |
COLOR_GRAYTEXT | Texte désactivé (gris) dans les boutons. Cette couleur est définie sur 0 si le pilote d’affichage actuel ne prend pas en charge une couleur gris unie. |
COLOR_WINDOW | Arrière-plan de fenêtre. |
COLOR_WINDOWFRAME | Cadres de fenêtre. |
COLOR_WINDOWTEXT | Texte dans les fenêtres. |
Toutefois, l’appel de SetSysColors affecte toutes les applications. Vous ne devez donc pas appeler cette fonction pour personnaliser les boutons de votre application.
Le système envoie un message WM_CTLCOLORBTN à la fenêtre parente d’un bouton avant de dessiner un bouton. Ce message contient un handle pour le contexte d’appareil du bouton et un handle pour la fenêtre enfant. La fenêtre parente peut utiliser ces poignées pour modifier le texte et les couleurs d’arrière-plan du bouton. Toutefois, seuls les boutons dessinés par le propriétaire répondent à la fenêtre parente qui traite le message.
La procédure de fenêtre pour la classe de fenêtre de contrôle de bouton prédéfinie effectue le traitement par défaut pour tous les messages que la procédure de contrôle de bouton ne traite pas. Lorsque la procédure de contrôle de bouton retourne FALSE pour n’importe quel message, la procédure de fenêtre prédéfinie vérifie les messages et effectue les actions par défaut répertoriées dans le tableau suivant.
Message | Action par défaut | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BM_CLICK | Envoie au bouton un WM_LBUTTONDOWN et un message WM_LBUTTONUP , puis envoie à la fenêtre parente un code de notification BN_CLICKED . | ||||||||||||||||
BM_GETCHECK | Retourne l’état case activée du bouton. | ||||||||||||||||
BM_GETIMAGE | Retourne un handle à l’image bitmap ou à l’icône associée au bouton ou NULL si le bouton n’a pas d’image bitmap ou d’icône. | ||||||||||||||||
BM_GETSTATE | Retourne l’état case activée actuel, l’état push et l’état de focus du bouton. | ||||||||||||||||
BM_SETCHECK | Définit l’état case activée pour tous les styles de cases d’option et de zones de case activée. Si le paramètre wParam est supérieur à zéro pour les cases d’option, le bouton reçoit le style WS_TABSTOP . | ||||||||||||||||
BM_SETIMAGE | Associe le bitmap ou le handle d’icône spécifié au bouton et retourne un handle à l’image bitmap ou à l’icône précédente. | ||||||||||||||||
BM_SETSTATE | Définit l’état push du bouton. Pour les boutons dessinés par le propriétaire, un message WM_DRAWITEM est envoyé à la fenêtre parente si l’état du bouton a changé. | ||||||||||||||||
BM_SETSTYLE | Définit le style de bouton. Si le mot d’ordre inférieur du paramètre lParam est TRUE, le bouton est redessiné. | ||||||||||||||||
WM_CHAR | Coche une case de case activée ou une case de case activée automatique lorsque l’utilisateur appuie sur les touches plus (+) ou égale (=). Efface une zone de case activée ou une zone de case activée automatique lorsque l’utilisateur appuie sur la touche moins (–). | ||||||||||||||||
WM_ENABLE | Peint le bouton. | ||||||||||||||||
WM_ERASEBKGND | Efface l’arrière-plan des boutons dessinés par le propriétaire. Les arrière-plans des autres boutons sont effacés dans le cadre du traitement WM_PAINT et WM_ENABLE . | ||||||||||||||||
WM_GETDLGCODE | Retourne des valeurs qui indiquent le type d’entrée traité par la procédure de bouton par défaut, comme indiqué dans le tableau suivant.
|
||||||||||||||||
WM_GETFONT | Retourne un handle à la police actuelle. | ||||||||||||||||
WM_KEYDOWN | Appuie sur le bouton si l’utilisateur appuie sur la barre d’espace. | ||||||||||||||||
WM_KEYUP | Libère la capture de la souris pour tous les cas, à l’exception de la touche TAB. | ||||||||||||||||
WM_KILLFOCUS | Supprime le rectangle de focus d’un bouton. Pour les boutons push et les boutons push par défaut, le rectangle de focus est invalidé. Si le bouton a la capture de la souris, la capture est relâchée, le bouton n’est pas cliqué et tout état push est supprimé. | ||||||||||||||||
WM_LBUTTONDBLCLK | Envoie un code de notification BN_DBLCLK à la fenêtre parente pour les cases d’option et les boutons dessinés par le propriétaire. Pour les autres boutons, un double-clic est traité comme un message WM_LBUTTONDOWN . | ||||||||||||||||
WM_LBUTTONDOWN | Met en surbrillance le bouton si la position du curseur de la souris se trouve dans le rectangle client du bouton. | ||||||||||||||||
WM_LBUTTONUP | Libère la capture de la souris si le bouton avait la capture de la souris. | ||||||||||||||||
WM_MOUSEMOVE | Effectue la même action que WM_LBUTTONDOWN, si le bouton a la capture de la souris. Sinon, aucune action n’est effectuée. | ||||||||||||||||
WM_NCCREATE | Transforme n’importe quel bouton BS_OWNERDRAW en bouton BS_PUSHBUTTON . | ||||||||||||||||
WM_NCHITTEST | Retourne HTTRANSPARENT, si le contrôle de bouton est une zone de groupe. | ||||||||||||||||
WM_PAINT | Dessine le bouton en fonction de son style et de son état actuel. | ||||||||||||||||
WM_SETFOCUS | Dessine un rectangle de mise au point sur le bouton qui obtient le focus. Pour les cases d’option et les cases d’option automatiques, la fenêtre parente reçoit un BN_CLICKED code de notification. | ||||||||||||||||
WM_SETFONT | Définit une nouvelle police et met éventuellement à jour la fenêtre. | ||||||||||||||||
WM_SETTEXT | Définit le texte du bouton. Dans le cas d’une zone de groupe, le message est peint sur le texte préexistant avant de repeindre la zone de groupe avec le nouveau texte. | ||||||||||||||||
WM_SYSKEYUP | Libère la capture de la souris pour tous les cas, à l’exception de la touche TAB. |
La procédure de fenêtre prédéfinie transmet tous les autres messages à la fonction DefWindowProc pour le traitement par défaut.