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

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

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 ».

capture d’écran d’un contrôle d’édition avec le texte de repère « search »

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.