Fonctionnalités de la zone de liste déroulante
Ce document décrit les fonctionnalités de la zone de liste déroulante. Pour plus d'informations, voir les rubriques suivantes :
- Fonctionnalités spéciales
- Notifications de zone de liste modifiable
- Comportement de zone de liste modifiable par défaut
Fonctionnalités spéciales
Il existe des messages et des fonctions à usage spécial qui permettent à une application d’afficher une liste de répertoires dans une zone de liste déroulante, d’associer des données à des éléments de liste dans une zone de liste déroulante et de modifier l’interface du clavier pour une zone de liste déroulante ou une zone de liste déroulante.
- Listes d’annuaires
- Données associées à des éléments de liste
- Interface utilisateur étendue
- Bannières de signaux
Listes d’annuaires
Une application peut ajouter les noms de fichiers ou de sous-répertoires à une zone de liste modifiable en lui envoyant le message CB_DIR . Le paramètre wParam de ce message spécifie les attributs des fichiers à ajouter, et le paramètre lParam est un pointeur vers la chaîne de texte qui définit la spécification de fichier.
Vous pouvez utiliser la fonction DlgDirListComboBox pour remplacer le contenu d’une zone de liste déroulante dans une boîte de dialogue. La fonction remplit la zone de liste déroulante avec les noms des lecteurs, répertoires et fichiers qui correspondent à un ensemble de critères spécifié. La fonction DlgDirSelectComboBoxEx récupère la sélection actuelle dans une zone de liste modifiable initialisée par DlgDirListComboBox. Ces fonctions permettent à l’utilisateur de sélectionner un lecteur, un répertoire ou un fichier à partir d’une zone de liste déroulante sans taper l’emplacement et le nom du fichier.
Les fonctions DlgDirListComboBox et DlgDirSelectComboBoxEx et le message CB_DIR sont similaires aux fonctions DlgDirList et DlgDirSelectEx et au message LB_DIR utilisé avec les zones de liste.
Données associées à des éléments de liste
Une application peut associer des données aux éléments de liste dans une zone de liste modifiable. Le message CB_SETITEMDATA associe une valeur DWORD à un élément de liste, et le CB_GETITEMDATA récupère la valeur associée à un élément de liste.
L’exemple de création d’une zone de liste déroulante dessinée par le propriétaire utilise des données d’élément pour associer une constante à chaque élément d’une zone de liste déroulante. Une telle valeur unique identifie chaque élément indépendamment de sa position triée.
D’autres applications peuvent utiliser des données d’élément pour associer un handle ou un pointeur à un élément de liste. Si c’est le cas, une application peut traiter un message WM_DELETEITEM pour supprimer ou libérer l’objet spécifié lorsque l’élément de liste est supprimé.
Interface utilisateur étendue
Les zones de liste déroulante et les zones de liste déroulante prennent en charge une autre interface clavier appelée interface utilisateur étendue. Par défaut, la touche F4 ouvre ou ferme la liste, et la flèche vers le bas modifie la sélection actuelle. Dans une zone de liste déroulante avec l’interface utilisateur étendue, toutefois, la touche F4 est désactivée et l’appui sur la flèche bas ouvre la liste déroulante. En outre, la roulette de la souris, qui fait normalement défiler les éléments de la liste, n’a aucune fonction lorsque l’interface utilisateur étendue est définie.
Pour sélectionner l’interface utilisateur d’une zone de liste déroulante, une application peut envoyer le message CB_SETEXTENDEDUI à la zone de liste déroulante. Une valeur TRUE pour le paramètre wParam active l’interface utilisateur étendue ; une valeur FALSE définit l’interface utilisateur par défaut. Pour déterminer si une zone de liste modifiable utilise l’interface utilisateur étendue, une application peut envoyer le message CB_GETEXTENDEDUI à la zone de liste déroulante.
Bannières de signaux
Les bannières de repère sont une nouvelle fonctionnalité des contrôles d’édition et des zones de liste déroulante. L’objectif d’une bannière de repère est de fournir à l’utilisateur une indication quant à l’objectif d’un contrôle de modification ou d’une zone de liste déroulante. La capture d’écran suivante montre un contrôle d’édition avec le texte de repère « Rechercher ».
Le texte d’une bannière de repère s’affiche lorsqu’un contrôle d’édition n’a pas de texte ou qu’une zone de liste modifiable n’a pas de sélection. Lorsque l’utilisateur entre du texte dans le contrôle d’édition ou effectue une sélection dans une zone de liste déroulante, la bannière de repère disparaît. Par défaut, la bannière de repère disparaît également lorsque le contrôle d’édition ou la zone de liste déroulante reçoit le focus.
Notifications de zone de liste modifiable
Les messages des zones de liste modifiable sont envoyés sous forme de codes de notification sous la forme de messages WM_COMMAND . Le code de notification est stocké dans le mot haut du paramètre wParam et une application peut traiter les codes de notification de zone de liste modifiable suivants.
Code de notification | Description |
---|---|
CBN_CLOSEUP | Indique que la liste d’une zone de liste déroulante ou d’une zone de liste déroulante est sur le point de se fermer. |
CBN_DBLCLK | Indique que l’utilisateur a double-cliqué sur un élément de liste dans une zone de liste modifiable simple. |
CBN_DROPDOWN | Indique que la liste d’une zone de liste déroulante ou d’une zone de liste déroulante est sur le point de s’ouvrir. |
CBN_EDITCHANGE | Indique que l’utilisateur a modifié le texte dans le contrôle d’édition d’une zone de liste déroulante simple ou déroulante. Ce code de notification est envoyé après l’affichage du texte modifié. |
CBN_EDITUPDATE | Indique que l’utilisateur a modifié le texte dans le contrôle d’édition d’une zone de liste déroulante simple ou déroulante. Ce code de notification est envoyé avant l’affichage du texte modifié. |
CBN_ERRSPACE | Indique que la zone de liste modifiable ne peut pas allouer suffisamment de mémoire pour exécuter une requête, par exemple l’ajout d’un élément de liste. |
CBN_KILLFOCUS | Indique que la zone de liste modifiable est sur le point de perdre le focus d’entrée. |
CBN_SELCHANGE | Indique que la sélection actuelle a changé. |
CBN_SELENDCANCEL | Indique que la sélection effectuée dans la liste déroulante, alors qu’elle a été supprimée, doit être ignorée. |
CBN_SELENDOK | Indique que la liste déroulante de sélection effectuée, alors qu’elle a été supprimée, doit être acceptée. |
CBN_SETFOCUS | Indique que la zone de liste modifiable a reçu le focus d’entrée. |
Comportement de zone de liste modifiable par défaut
Le tableau suivant décrit les messages spécifiquement gérés par la procédure de fenêtre de classe COMBOBOX prédéfinie.
Message | Description |
---|---|
CB_ADDSTRING | Envoie un message LB_ADDSTRING à la fenêtre de liste pour ajouter un élément de liste. |
CB_DELETESTRING | Envoie un message LB_DELETESTRING à la fenêtre de liste pour supprimer un élément de liste. |
CB_DIR | Ajoute les noms de fichiers correspondant aux attributs et au chemin d’accès spécifiés à la liste. |
CB_FINDSTRING | Envoie un message LB_FINDSTRING à la fenêtre de liste. Ce message retourne l’index du premier élément de liste qui commence par le texte spécifié. |
CB_FINDSTRINGEXACT | Envoie un message LB_FINDSTRING à la fenêtre de liste. Ce message retourne l’index du premier élément de liste correspondant exactement au texte spécifié. |
CB_GETCOUNT | Envoie un message LB_GETCOUNT à la fenêtre de liste. Il retourne le nombre d’éléments de liste. |
CB_GETCURSEL | Envoie un message LB_GETCURSEL à la fenêtre de liste. Il retourne l’index de l’élément actuellement sélectionné, le cas échéant. |
CB_GETDROPPEDCONTROLRECT | Remplit la structure de rectangle spécifiée avec les coordonnées d’écran d’une liste déroulante. |
CB_GETDROPPEDSTATE | Retourne TRUE si une liste déroulante est ouverte ; sinon, il retourne FALSE. |
CB_GETDROPPEDWIDTH | Retourne la largeur minimale autorisée, en pixels, de la liste déroulante. |
CB_GETEDITSEL | Envoie un message EM_GETSEL au contrôle d’édition et retourne la position de début et de fin de la sélection actuelle. Dans les zones de liste déroulante, la procédure de fenêtre retourne CB_ERR. |
CB_GETEXTENDEDUI | Renvoie TRUE si la zone de liste déroulante est une zone de liste déroulante ou une zone de liste déroulante et que l’indicateur d’extension de l’interface utilisateur est défini ; sinon, il retourne FALSE. |
CB_GETHORIZONTALEXTENT | Envoie un message LB_GETHORIZONTALEXTENT à la fenêtre de liste. Il retourne la largeur de défilement, en pixels, de la liste déroulante. |
CB_GETITEMDATA | Envoie un message LB_GETITEMDATA à la fenêtre de liste. Il retourne la valeur associée à l’élément de liste spécifié. |
CB_GETITEMHEIGHT | Envoie un message LB_GETITEMHEIGHT à la fenêtre de liste. Il retourne la hauteur, en pixels, de l’élément de liste dessiné par le propriétaire spécifié. |
CB_GETLBTEXT | Envoie un message LB_GETTEXT à la fenêtre de liste. Il copie le texte de liste spécifié dans la mémoire tampon spécifiée. |
CB_GETLBTEXTLEN | Envoie un message LB_GETTEXTLEN à la fenêtre de liste. Il retourne la longueur, en TCHAR, du texte de liste spécifié. |
CB_GETLOCALE | Envoie un message LB_GETLOCALE à la fenêtre de liste. Il retourne les paramètres régionaux actuels de la liste. |
CB_GETMINVISIBLE | Obtient le nombre minimal d’éléments visibles dans la liste déroulante d’une zone de liste déroulante. |
CB_GETTOPINDEX | Envoie un message LB_GETTOPINDEX à la fenêtre de liste. Elle retourne l’index du premier élément visible dans la liste déroulante. |
CB_INITSTORAGE | Envoie un message LB_INITSTORAGE à la fenêtre de liste. Il initialise l’espace pour le nombre spécifié d’éléments et le nombre d’octets spécifié pour les chaînes d’éléments. |
CB_INSERTSTRING | Envoie un message LB_INSERTSTRING à la fenêtre de liste. Il insère un élément de liste à la position spécifiée. |
CB_LIMITTEXT | Envoie un message EM_LIMITTEXT au contrôle d’édition. Il définit le nombre maximal de caractères qu’un utilisateur peut entrer dans le contrôle d’édition. Dans les zones de liste déroulante, la procédure de fenêtre retourne CB_ERR. |
CB_RESETCONTENT | Envoie un message LB_RESETCONTENT à la fenêtre de liste et supprime le contenu de la liste. |
CB_SELECTSTRING | Envoie un message LB_SELECTSTRING à la fenêtre de liste. Il sélectionne le premier élément de liste, le cas échéant, qui commence par les caractères du texte spécifié. |
CB_SETCURSEL | Envoie un message LB_SETCURSEL à la fenêtre de liste et définit la sélection actuelle. |
CB_SETDROPPEDWIDTH | Définit la largeur minimale autorisée, en pixels, de la liste déroulante. |
CB_SETEDITSEL | Envoie un message EM_SETSEL au contrôle d’édition. Il sélectionne la plage de texte spécifiée. Dans les zones de liste déroulante, la procédure de fenêtre retourne CB_ERR. |
CB_SETEXTENDEDUI | Définit ou efface l’indicateur d’interface utilisateur étendu. Cet indicateur modifie les touches qui ouvrent et ferment la liste dans une zone de liste déroulante ou une zone de liste déroulante. Si la zone de liste modifiable est une zone de liste modifiable simple, la procédure de fenêtre retourne CB_ERR. |
CB_SETHORIZONTALEXTENT | Envoie un message LB_SETHORIZONTALEXTENT à la fenêtre de liste. Il définit la largeur de défilement, en pixels, de la liste déroulante. |
CB_SETITEMDATA | Envoie un message LB_SETITEMDATA à la fenêtre de liste. Il associe la valeur spécifiée à un élément de liste. |
CB_SETITEMHEIGHT | Envoie un message LB_SETITEMHEIGHT à la fenêtre de liste. Il définit la hauteur de l’élément de liste dessiné par le propriétaire spécifié ou du champ de sélection. |
CB_SETLOCALE | Envoie un message LB_SETLOCALE à la fenêtre de liste et définit les paramètres régionaux actuels pour la liste. Les paramètres régionaux affectent la façon dont la liste est triée si elle a le style CBS_SORT et que des chaînes sont ajoutées à l’aide de CB_ADDSTRING. |
CB_SETMINVISIBLE | Définit le nombre minimal d’éléments visibles dans la liste déroulante d’une zone de liste déroulante. |
CB_SETTOPINDEX | Envoie un message LB_SETTOPINDEX à la fenêtre de liste. Il fait défiler la liste déroulante afin que l’élément spécifié se trouve en haut de la plage visible. |
CB_SHOWDROPDOWN | Affiche ou masque la liste déroulante. Ce message n’a aucun effet sur les zones de liste modifiable simples. |
WM_CHAR | Traite l’entrée de caractère. Dans les zones de liste déroulante, ce message est transmis à la fenêtre de liste, qui déplace la sélection vers le premier élément commençant par le caractère spécifié. Dans les zones de liste déroulante simples, ce message est passé au contrôle d’édition. |
WM_CLEAR | Supprime la sélection de modification. Dans les zones de liste déroulante simples, le contrôle d’édition traite ce message. Dans les zones de liste déroulante, la procédure de fenêtre retourne CB_ERR. |
WM_COMMAND | Traite les messages de notification à partir de la fenêtre de contrôle d’édition et de liste et envoie les codes de notification de zone de liste modifiable correspondants à la fenêtre parente. |
Pour les notifications de modification de contrôle, la procédure de fenêtre peut mettre à jour la sélection actuelle de la fenêtre de liste, l’index caret et l’index supérieur. Pour les messages de notification de liste, la procédure de fenêtre peut mettre à jour le contenu du champ de sélection. | |
WM_COMPAREITEM | Transmet le message à la fenêtre parente, ce qui permet à l’application de spécifier la position de tri relative de deux éléments de liste dessinés par le propriétaire. La fenêtre de zone de liste déroulante reçoit ce message à partir de la fenêtre de liste. |
WM_COPY | Copie la sélection de modification dans le Presse-papiers. Dans les zones de liste déroulante simples, le contrôle d’édition traite ce message. Dans les zones de liste déroulante, la procédure de fenêtre retourne CB_ERR. |
WM_CREATE | Initialise la zone de liste déroulante. |
WM_CUT | Supprime la sélection de modification et la place dans le Presse-papiers. Dans les zones de liste déroulante simples, le contrôle d’édition traite ce message. Dans les zones de liste déroulante, la procédure de fenêtre retourne CB_ERR. |
WM_DELETEITEM | Transmet le message à la fenêtre parente, en informant l’application qu’un élément de liste a été supprimé. La fenêtre de zone de liste déroulante reçoit ce message de la fenêtre de liste. |
WM_DRAWITEM | Transmet le message à la fenêtre parente permettant à l’application de peindre l’élément de liste spécifié. La fenêtre de zone de liste déroulante reçoit ce message de la fenêtre de liste. La procédure de fenêtre peut également provenir de ce message pour que l’application peigne le champ de sélection d’une zone de liste déroulante. |
WM_ENABLE | Définit l’état pour activer ou interdire l’entrée de la souris et du clavier. |
WM_ERASEBKGND | Retourne 1, indiquant que l’arrière-plan est effacé. |
WM_GETDLGCODE | Retourne une combinaison des valeurs DLG_WANTCHARS et DLGC_WANTARROWS. |
WM_GETFONT | Retourne le handle à la police actuelle avec laquelle la zone de liste déroulante dessinera son texte. |
WM_GETTEXT | Copie le contenu du champ de sélection dans la mémoire tampon spécifiée. Dans les zones de liste déroulante simples, le contrôle d’édition traite ce message. |
WM_GETTEXTLENGTH | Retourne la longueur, en caractères, du texte dans le champ de sélection. Dans les zones de liste déroulante simples, le contrôle d’édition traite ce message. |
WM_KEYDOWN | Traite l’entrée du clavier non-caractère. Dans les zones de liste déroulante, ce message est envoyé à la fenêtre de liste, qui peut s’afficher ou se masquer, ou modifier son index de sélection ou d’insertion actuel. Dans les zones de liste déroulante simples, ce message est passé au contrôle d’édition. Le contrôle d’édition transmet certaines touches à la fenêtre de liste, telles que les touches de direction haut et bas et la touche F4. |
WM_KILLFOCUS | Masque la mise en surbrillance dans le champ de sélection et ferme la liste déroulante, si nécessaire. Si la fenêtre qui reçoit le focus d’entrée fait partie de la zone de liste modifiable (par exemple, le contrôle d’édition), ce message est ignoré. |
WM_LBUTTONDBLCLK | Identique à WM_LBUTTONDOWN. |
WM_LBUTTONDOWN | Définit le focus sur la zone de liste déroulante et, pour les zones de liste déroulante et les listes déroulantes, peut ouvrir ou fermer la liste. Si elle ouvre la liste, la procédure de fenêtre capture la souris pour activer la sélection en faisant glisser et en relâchant le bouton de la souris. |
WM_LBUTTONUP | Libère la capture de la souris si la souris a ouvert la liste. |
WM_MEASUREITEM | Publie le message dans la fenêtre parente, ce qui permet à l’application de modifier le contenu de la structure MEASUREITEMSTRUCT spécifiée. La fenêtre de zone de liste déroulante reçoit ce message de la fenêtre de liste. |
WM_MOUSEMOVE | Publie le message dans la fenêtre de liste si la souris a ouvert la liste et que le bouton de la souris est toujours en panne. Cela permet à un utilisateur de sélectionner un élément en faisant glisser le pointeur de la souris vers un élément de liste, puis en relâchant le bouton. |
WM_NCCREATE | Alloue une structure de données interne utilisée par la procédure de fenêtre de zone de liste déroulante. |
WM_NCDESTROY | Libère les ressources allouées en réponse au message WM_NCCREATE . |
WM_PAINT | Peint la région non valide de la zone de liste modifiable. Si wParam n’a pas la valeur NULL, il est supposé être un handle de contexte d’appareil (DC) passé à partir d’une fonction de sous-classe. La procédure de fenêtre utilise le contrôleur de domaine spécifié au lieu d’appeler BeginPaint et EndPaint. |
WM_PASTE | Remplace la sélection de modification par le contenu du Presse-papiers. Dans les zones de liste déroulante simples, le contrôle d’édition traite ce message. Dans les zones de liste déroulante, la procédure de fenêtre retourne CB_ERR. |
WM_SETFOCUS | Définit le focus sur le contrôle d’édition ou, dans les zones de liste déroulante, inverse le champ de sélection et active l’insertion dans la fenêtre de liste. |
WM_SETFONT | Enregistre le handle de police spécifié dans une structure interne, ajuste les dimensions du champ de sélection et de la liste, et invalide la fenêtre de zone de liste modifiable. Le texte dans le champ de sélection et la liste s’affiche dans la police enregistrée. |
WM_SETREDRAW | Définit ou efface l’indicateur de redessination. Si l’indicateur de redessination est effacé, la zone de liste modifiable n’est pas repeinte tant que l’indicateur n’est pas à nouveau défini. |
WM_SETTEXT | Définit le contenu du contrôle d’édition. Dans les zones de liste déroulante simples, le contrôle d’édition traite ce message. Dans les zones de liste déroulante, la procédure de fenêtre retourne CB_ERR. |
WM_SIZE | Redimensionne les fenêtres enfants, si nécessaire. |
WM_SYSKEYDOWN | Ouvre ou ferme la liste déroulante en fonction de la touche de direction sur laquelle l’utilisateur a appuyé. |
Tous les autres messages sont passés à la fonction DefWindowProc pour traitement par défaut.