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

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 .

Gestion des messages à partir d’un bouton

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.

Messages de notification provenant de boutons

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.

Messages de couleur de bouton

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.

Traitement des messages par défaut du bouton

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.
Style de bouton Retours
BS_AUTOCHECKBOX DLGC_WANTCHARS | DLGC_BUTTON
BS_AUTORADIOBUTTON DLGC_RADIOBUTTON | DLGC_BUTTON
BS_CHECKBOX DLGC_WANTCHARS | DLGC_BUTTON
BS_DEFPUSHBUTTON DLGC_DEFPUSHBUTTON | DLGC_BUTTON
BS_GROUPBOX DLGC_STATIC
BS_PUSHBUTTON DLGC_UNDEFPUSHBUTTON | DLGC_BUTTON
BS_RADIOBUTTON DLGC_RADIOBUTTON | DLGC_BUTTON

 

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.

Messages de contrôle