Partager via


Messages de contrôle

Cette section contient des informations sur la façon dont les messages Windows sont utilisés pour communiquer avec les contrôles.

Les rubriques suivantes sont abordées.

Messages vers des contrôles courants

Étant donné que les contrôles courants sont des fenêtres, une application peut communiquer avec eux à l’aide de messages Microsoft Win32 courants tels que WM_GETFONT ou WM_SETTEXT. En outre, la classe de fenêtre de chaque contrôle commun prend en charge un ensemble de messages spécifiques au contrôle. En règle générale, une application utilise sendMessage ou SendDlgItemMessage pour transmettre des messages au contrôle (recevant souvent des informations dans la valeur de retour).

Certains contrôles courants ont également un ensemble de macros qu’une application peut utiliser au lieu de sendMessage. Les macros sont généralement plus faciles à utiliser que les fonctions. L’exemple de code suivant récupère le texte de l’élément d’arborescence sélectionné, d’abord en utilisant les messages bruts, puis en utilisant les macros équivalentes. Supposons que est le handle de la fenêtre de contrôle.

BOOL fSuccess;
WCHAR itemText[99];
TVITEM tvItem = { 0 };
tvItem.mask = TVIF_TEXT;
tvItem.cchTextMax = ARRAYSIZE(itemText);
tvItem.pszText = itemText;

// This...
tvItem.hItem = (HTREEITEM)SendMessage(hwnd, TVM_GETNEXTITEM, TVGN_CARET, NULL);
fSuccess = SendMessage(hwnd, TVM_GETITEM, 0, (LPARAM)&tvItem);

// ... is equivalent to this.
tvItem.hItem = TreeView_GetSelection(hwnd);
fSuccess = TreeView_GetItem(hwnd, &tvItem);

Lorsqu’une modification est apportée aux paramètres de couleur système, Windows envoie un message WM_SYSCOLORCHANGE à toutes les fenêtres de niveau supérieur. Votre fenêtre de niveau supérieur doit transférer le message WM_SYSCOLORCHANGE à ses contrôles communs ; sinon, les contrôles ne seront pas avertis de la modification de couleur. Le transfert du message garantit que les couleurs utilisées par vos contrôles communs sont cohérentes avec celles utilisées par d’autres objets d’interface utilisateur. Par exemple, un contrôle de barre d’outils utilise la couleur « Objets 3D » pour dessiner ses boutons. Si l’utilisateur modifie la couleur de l’objet 3D, mais que le message WM_SYSCOLORCHANGE n’est pas transféré à la barre d’outils, les boutons de barre d’outils restent dans leur couleur d’origine (ou même passent à une combinaison d’anciennes et nouvelles couleurs) tandis que la couleur des autres boutons du système change.

Notifications à partir de contrôles

Les contrôles sont des fenêtres enfants qui envoient des messages de notification à la fenêtre parente lorsque des événements, généralement déclenchés par l’entrée de l’utilisateur, se produisent dans le contrôle. L’application s’appuie sur ces messages de notification pour déterminer l’action que l’utilisateur souhaite prendre. À l’exception des barres de suivi, qui utilisent les messages WM_HSCROLL et WM_VSCROLL pour notifier leur parent des modifications, les contrôles courants envoient des notifications en tant que messages WM_COMMAND ou WM_NOTIFY, comme spécifié dans la rubrique de référence pour la notification. En règle générale, les notifications plus anciennes (celles qui ont été dans l’API depuis longtemps) utilisent WM_COMMAND.

Le paramètre lParam de WM_NOTIFY est l’adresse d’une structure NMHDR ou l’adresse d’une structure plus grande qui inclut nmHDR en tant que premier membre. La structure contient le code de notification et identifie le contrôle commun qui a envoyé le message de notification. La signification des membres de la structure restantes, le cas échéant, varie en fonction du code de notification.

Chaque type de contrôle commun a un ensemble correspondant de codes de notification. La bibliothèque de contrôles commune fournit également des codes de notification qui peuvent être envoyés par plusieurs types de contrôle commun. Consultez la documentation relative au contrôle d’intérêt pour déterminer les codes de notification qu’il enverra et le format qu’ils prennent.

Pour obtenir un exemple de code montrant comment gérer WM_NOTIFY messages, consultez la rubrique de référence pour ce message.

de référence de contrôle général