À propos des contrôles ComboBoxEx

Les contrôles ComboBoxEx sont des contrôles de zone de liste modifiable qui fournissent une prise en charge native des images d’élément. Pour rendre les images d’éléments facilement accessibles, le contrôle fournit la prise en charge de la liste d’images. À l’aide de ce contrôle, vous pouvez fournir les fonctionnalités d’une zone de liste déroulante sans avoir à dessiner manuellement des graphiques d’élément.

Cette rubrique contient les sections suivantes.

Création de contrôles ComboBoxEx

En effet, un contrôle ComboBoxEx crée une zone de liste modifiable enfant et effectue des tâches de dessin de propriétaire pour vous en fonction d’une liste d’images attribuée. Par conséquent, le style CBS_OWNERDRAWFIXED est implicite et il n’est pas nécessaire de l’utiliser lors de la création du contrôle. Étant donné que les listes d’images sont utilisées pour fournir des graphiques d’élément, le style CBS_OWNERDRAWVARIABLE ne peut pas être utilisé.

Un contrôle ComboBoxEx doit être initialisé en appelant la fonction InitCommonControlsEx , en spécifiant ICC_USEREX_CLASSES dans la structure INITCOMMONCONTROLSEX associée.

Vous pouvez créer un contrôle ComboBoxEx à l’aide de la fonction CreateWindowEx et en spécifiant WC_COMBOBOXEX comme classe de fenêtre. La classe est inscrite lorsque la fonction InitCommonControlsEx est appelée comme expliqué ci-dessus.

Les contrôles ComboBoxEx sont créés sans liste d’images par défaut. Pour utiliser des images d’élément, vous devez créer une liste d’images pour le contrôle ComboBoxEx et l’affecter au contrôle à l’aide du message CBEM_SETIMAGELIST . Si vous n’affectez pas de liste d’images au contrôle ComboBoxEx, le contrôle affiche uniquement le texte de l’élément.

Styles de contrôle ComboBoxEx

Les contrôles ComboBoxEx prennent uniquement en charge les styles ComboBox suivants :

  • CBS_SIMPLE
  • CBS_DROPDOWN
  • CBS_DROPDOWNLIST
  • WS_CHILD

Il existe également plusieurs styles étendus de contrôle ComboBoxEx qui sont utilisés uniquement par ComboBoxEx.

Notes

Le style CBS_SIMPLE peut ne pas fonctionner correctement dans certains cas.

 

Étant donné que le contrôle ComboBoxEx effectue des tâches de dessin de propriétaire pour vous en fonction d’une liste d’images attribuée, le style CBS_OWNERDRAWFIXED est implicite ; vous n’avez pas besoin de l’utiliser lors de la création du contrôle. Étant donné que les listes d’images sont utilisées pour fournir des graphiques d’élément, le style CBS_OWNERDRAWVARIABLE ne peut pas être utilisé. Le contrôle ComboBoxEx prend également en charge les styles étendus de contrôle ComboBoxEx qui fournissent des fonctionnalités supplémentaires.

Éléments de contrôle ComboBoxEx

Les contrôles ComboBoxEx conservent les informations d’élément à l’aide d’une structure COMBOBOXEXITEM . Cette structure comprend des membres pour les index d’éléments, les index d’image (normal, état de sélection et superposition), les valeurs de retrait, les chaînes de texte et les valeurs spécifiques à l’élément.

Le contrôle ComboBoxEx permet d’accéder facilement aux éléments et de les manipuler via la messagerie. Pour ajouter ou supprimer un élément, envoyez le message CBEM_INSERTITEM ou CBEM_DELETEITEM . Vous pouvez modifier des éléments actuellement dans le contrôle à l’aide du message CBEM_SETITEM .

Éléments de rappel

Les contrôles ComboBoxEx prennent en charge les attributs d’élément de rappel. Vous pouvez spécifier un élément en tant qu’élément de rappel lorsque vous l’ajoutez au contrôle à l’aide de CBEM_INSERTITEM. Lorsque vous affectez des valeurs à la structure COMBOBOXEXITEM d’un élément, vous devez spécifier les valeurs d’indicateur de rappel appropriées. Voici les membres de la structure COMBOBOXEXITEM et leurs valeurs d’indicateur de rappel correspondantes.

Membre Valeur de rappel
pszText LPSTR_TEXTCALLBACK
iImage I_IMAGECALLBACK
iSelectedImage I_IMAGECALLBACK
iOverlay I_IMAGECALLBACK
iIndent I_INDENTCALLBACK

 

Le contrôle demande des informations sur les éléments de rappel en envoyant CBEN_GETDISPINFO codes de notification. Cette notification est envoyée sous la forme d’un message WM_NOTIFY . Lorsque votre application traite ce message, elle doit fournir les informations demandées pour le contrôle. Si vous définissez le membre de masque de la structure COMBOBOXEXITEM associée sur CBEIF_DI_SETITEM, le contrôle stocke les données d’élément et ne les demande plus.

Listes d’images de contrôle ComboBoxEx

Si vous souhaitez qu’un contrôle ComboBoxEx affiche des icônes avec des éléments, vous devez fournir une liste d’images. Les contrôles ComboBoxEx prennent en charge jusqu’à trois images pour un élément : une pour son état sélectionné, une pour son état non sélectionné et une autre pour une image superposée. Affectez une liste d’images existante à un contrôle ComboBoxEx à l’aide du message CBEM_SETIMAGELIST .

La structure COMBOBOXEXITEM contient des membres qui représentent les index d’image pour chaque liste d’images (sélectionnée, non sélectionnée et superposée). Pour chaque élément, définissez ces membres pour afficher les images souhaitées. Il n’est pas nécessaire de spécifier des index d’image pour chaque type d’image. Vous pouvez mélanger et faire correspondre des types d’images comme vous le souhaitez, mais toujours définir le membre de masque de la structure COMBOBOXEXITEM pour indiquer quels membres sont utilisés. Le contrôle ignore les membres qui n’ont pas été marqués comme valides.

Notes

Si vous utilisez le style CBS_SIMPLE , les icônes ne s’affichent pas.

 

À propos des messages de notification de contrôle ComboBoxEx

Un contrôle ComboBoxEx envoie des messages de notification pour signaler des modifications en lui-même ou pour demander des informations sur l’élément de rappel. Le parent du contrôle reçoit tous les messages WM_COMMAND de la zone de liste déroulante contenue dans le contrôle ComboBoxEx. Le contrôle ComboBoxEx envoie ses propres notifications à l’aide de WM_NOTIFY messages. Par conséquent, le propriétaire du contrôle doit être prêt à traiter les deux formes de messages de notification.

Voici les codes de notification spécifiques à ComboBoxEx qui sont envoyés via WM_NOTIFY messages.

Notification Description
CBEN_BEGINEDIT Indique que l’utilisateur a activé la liste déroulante ou cliqué dans la zone d’édition du contrôle.
CBEN_ENDEDIT Indique que l’utilisateur a sélectionné un élément dans la liste déroulante ou a conclu une opération de modification dans la zone d’édition.
CBEN_DELETEITEM Signale qu’un élément a été supprimé.
CBEN_GETDISPINFO Demande des informations sur les attributs d’un élément.
CBEN_INSERTITEM Signale qu’un élément a été inséré dans le contrôle.

 

Transfert de messages de contrôle ComboBoxEx

Voici les messages de zone de liste modifiable standard qu’un contrôle ComboBoxEx transmet à sa zone de liste déroulante enfant. Certains de ces messages peuvent être traités par le contrôle ComboBoxEx avant ou après le transfert du message.

Voici les messages windows qu’un contrôle ComboBoxEx transmet à sa fenêtre parente :