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 aux 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 window 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 passer 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 à l’aide des messages bruts, puis en utilisant les macros équivalentes. Supposons que hwnd soit 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 ; dans le cas contraire, les contrôles ne seront pas informés du changement 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é vers 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 de nouvelles couleurs) tandis que la couleur des autres boutons du système change.

Notifications des 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 une 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 qu’il prenne. À l’exception des barres de suivi, qui utilisent les messages WM_HSCROLL et WM_VSCROLL pour informer 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 de la notification. En règle générale, les notifications plus anciennes (celles qui sont dans l’API depuis longtemps) utilisent WM_COMMAND.

Le paramètre lParam de WM_NOTIFY est soit l’adresse d’une structure NMHDR , soit l’adresse d’une structure plus grande qui inclut NMHDR comme 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 structure restants, 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ôles courants. 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.

Informations de référence sur les contrôles généraux