À propos des contrôles ComboBoxEx
Les contrôles ComboBoxEx sont des contrôles de zone de liste déroulante qui fournissent une prise en charge native des images d’élément. Pour faciliter l’accès aux images d’élément, 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 les graphiques d’éléments.
Cette rubrique contient les sections suivantes.
- Création de contrôles ComboBoxEx
- Styles de contrôle ComboBoxEx
- Éléments de contrôle ComboBoxEx
- Éléments de rappel
- Listes d’images de contrôle ComboBoxEx
- À propos des messages de notification de contrôle ComboBoxEx
- ComboBoxEx le transfert des messages de contrôle
Création de contrôles ComboBoxEx
En fait, un contrôle ComboBoxEx crée une zone de liste déroulante enfant et effectue Owner Draw tâches pour vous en fonction d’une liste d’images affecté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 _ les _ classes USEREX ICC 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’assigner au contrôle à l’aide du message CBEM _ SETIMAGELIST . Si vous n’assignez 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 de zone de liste modifiable suivants :
- CBS _ simple
- _liste déroulante CBS
- _DropDownList SCC
- _enfant WS
Il existe également plusieurs styles étendus de contrôle ComboBoxEx qui sont utilisés uniquement par ComboBoxEx.
Notes
Le style _ simple CBS peut ne pas fonctionner correctement dans certains cas.
Étant donné que le contrôle ComboBoxEx effectue Owner Draw tâches pour vous en fonction d’une liste d’images affecté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 gèrent 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’images (normal, état de sélection et superposition), les valeurs de mise en retrait, les chaînes de texte et les valeurs spécifiques aux éléments.
Le contrôle ComboBoxEx permet d’accéder facilement aux éléments et de les manipuler par le biais de la messagerie. Pour ajouter ou supprimer un élément, envoyez le message CBEM _ INSERTITEM ou CBEM _ DELETEITEM . Vous pouvez modifier les éléments qui se trouvent 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 assignez 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 | Je _ IMAGECALLBACK |
| iSelectedImage | Je _ IMAGECALLBACK |
| iOverlay | Je _ IMAGECALLBACK |
| iIndent | Je _ INDENTCALLBACK |
Le contrôle demande des informations sur les éléments de rappel en envoyant des codes de notification CBEN _ GETDISPINFO . 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 Mask de la structure COMBOBOXEXITEM associée sur CBEIF _ di _ SETITEM, le contrôle stocke les données d’élément et ne les redemande pas.
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 pour une image de superposition. 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’images pour chaque liste d’images (sélectionnée, désélectionnée et superposée). Pour chaque élément, définissez ces membres de façon à afficher les images souhaitées. Il n’est pas nécessaire de spécifier des index d’images pour chaque type d’image. Vous pouvez mélanger et faire correspondre les types d’images comme vous le souhaitez, mais vous devez toujours définir le membre Mask de la structure COMBOBOXEXITEM pour indiquer les membres qui sont utilisés. Le contrôle ignore les membres qui n’ont pas été marqués comme étant valides.
Notes
Si vous utilisez le style _ simple CBS , les icônes ne sont pas affichées.
À propos des messages de notification de contrôle ComboBoxEx
Un contrôle ComboBoxEx envoie des messages de notification pour signaler les modifications dans lui-même ou pour demander des informations sur les éléments de rappel. Le parent du contrôle reçoit tous les messages de _ commande WM de la zone de liste déroulante contenue dans le contrôle ComboBoxEx. Le contrôle ComboBoxEx envoie ses propres notifications à l’aide de messages de _ notification WM . Par conséquent, le propriétaire du contrôle doit être préparé à traiter les deux formes de message de notification.
Voici les codes de notification spécifiques à ComboBoxEx qui sont envoyés par le biais de messages de notification WM _ .
| Notification | Description |
|---|---|
| CBEN _ BEGINEDIT | Signale que l’utilisateur a activé la liste déroulante ou qu’il a cliqué dans la zone d’édition du contrôle. |
| CBEN _ ENDEDIT | Signale que l’utilisateur a sélectionné un élément dans la liste déroulante ou a terminé 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. |
ComboBoxEx le transfert des messages de contrôle
Voici les messages de zone de liste déroulante 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.
- _DELETESTRING CB
- _FINDEXACTSTRING CB
- CB _ GETCOUNT
- _GETCURSEL CB
- _GETDROPPEDCONTROLRECT CB
- _GETDROPPEDSTATE CB
- _GETITEMDATA CB
- _GETITEMHEIGHT CB
- _GETLBTEXT CB
- _GETLBTEXTLEN CB
- _GETEXTENDEDUI CB
- _LIMITTEXT CB
- _RESETCONTENT CB
- _SETCURSEL CB
- _SETDROPPEDWIDTH CB
- _SETEXTENDEDUI CB
- _SETITEMDATA CB
- _SETITEMHEIGHT CB
- _SHOWDROPDOWN CB
Voici les messages Windows qu’un contrôle ComboBoxEx transmet à sa fenêtre parente :
- WM _ COMMANDE (y compris toutes les _ notifications CBN.)
- _notification WM