La classe CComboBox fournit les fonctionnalités d'une zone de liste déroulante Windows.
Une zone de liste modifiable est constitué d'une zone de liste combinée avec un contrôle statique ou d'un contrôle d'édition. La partie de la zone de liste de contrôle peut être affichée en tout temps ou peut descendre seulement lorsque l'utilisateur sélectionne la flèche déroulante à côté du contrôle.
L'élément actuellement sélectionné (le cas échéant) dans la zone de liste est affichée dans la statique ou de contrôle d'édition. En outre, si la zone de liste modifiable a le style dans la liste déroulante, l'utilisateur peut taper le caractère initial de l'un des éléments dans la liste, et la zone de liste, si visible, mettra l'accent sur l'élément suivant avec ce personnage initial.
Le tableau suiva&nt compare la zone de liste modifiable trois styles.nbsp;
Style
Où est la zone de liste visible?
Contrôle statique ou edit?
Simple
Toujours
Edit
Drop-down
Lorsqu'il a chuté vers le bas
Edit
Dans la liste déroulante
Lorsqu'il a chuté vers le bas
Statique
Vous pouvez créer un objet CComboBox dans un modèle de boîte de dialogue ou directement dans votre code. Dans les deux cas, d'abord appeler le constructeur CComboBox pour construire l'objet CComboBox ; Ensuite, appelez la fonction membre Create pour créer le contrôle et l'associer à l'objet CComboBox.
Si vous souhaitez gérer les messages de notification de Windows par une zone de liste modifiable a envoyé à son parent (généralement une classe dérivée de CDialog), ajouter une fonction de membre de message-carte entrée et gestionnaire de messages pour la classe parente pour chaque message.
Chaque entrée de la carte-message prend la forme suivante:
ON_Notification()id,memberFxn)
où id spécifie l'ID de la fenêtre-enfant du contrôle de liste déroulante envoi de la notification et memberFxn est le nom de la fonction de membre parent que vous avez écrit pour gérer la notification.
Voici le prototype de la fonction du parent:
afx_msgvoidmemberFxn();
L'ordre dans lequel certaines notifications seront envoyées ne peut être prédites. En particulier, une notification CBN_SELCHANGE du peut se produire avant ou après une notification de CBN_CLOSEUP.
Entrées de message-carte possibles sont les suivantes:
O&N_CBN_CLOSEUPnbsp ; (Windows 3.1 et ultérieures). La zone de liste d'une zone de liste déroulante a fermé. Ce message de notification n'est pas envoyé à une liste déroulante qui possède le style CBS_SIMPLE.
O&N_CBN_DBLCLKnbsp ; L'utilisateur double-clique sur une chaîne dans la zone de liste d'une zone de liste déroulante. Ce message de notification n'est envoyé à une liste déroulante avec le style CBS_SIMPLE . Pour une liste déroulante avec le style CBS_DROPDOWN ou CBS_DROPDOWNLIST , un double-clic ne peut se produire parce qu'un simple clic masque la zone de liste.
O&N_CBN_DROPDOWNnbsp ; La zone de liste d'une zone de liste modifiable est sur le point de descendre (être rendue visible). Ce message de notification peut se produire uniquement pour une liste déroulante avec le style CBS_DROPDOWN ou CBS_DROPDOWNLIST.
O&N_CBN_EDITCHANGEnbsp ; L'utilisateur a pris une mesure qui peut avoir modifié le texte dans la partie du contrôle d'édition d'une zone de liste déroulante. À la différence du message CBN_EDITUPDATE , ce message est envoyé après que Windows met à jour l'écran. Il n'est pas envoyé si la liste déroulante style CBS_DROPDOWNLIST.
O&N_CBN_EDITUPDATEnbsp ; La partie du contrôle d'édition d'une zone de liste modifiable est sur le point d'afficher du texte modifié. Ce message de notification est envoyé après que le contrôle a mis en forme le texte, mais avant il affiche le texte. Il n'est pas envoyé si la liste déroulante style CBS_DROPDOWNLIST.
O&N_CBN_ERRSPACEnbsp ; La liste déroulante ne peut pas allouer suffisamment de mémoire pour répondre à une demande spécifique.
O&N_CBN_SELENDCANCELnbsp ; (Windows 3.1 et ultérieures). Indique la que sélection de l'utilisateur doit être annulée. L'utilisateur clique sur un élément, puis clique sur une autre fenêtre ou le contrôle pour masquer la zone de liste d'une zone de liste déroulante. Ce message de notification est envoyé avant le message de notification CBN_CLOSEUP pour indiquer que la sélection de l'utilisateur doit être ignorée. Le message de notification CBN_SELENDCANCEL ou CBN_SELENDOK est envoyé même si le message de notification CBN_CLOSEUP n'est pas envoyé (comme dans le cas d'une zone de liste déroulante avec le style CBS_SIMPLE ).
O&N_CBN_SELENDOKnbsp ; L'utilisateur sélectionne un élément et puis appuie sur la touche entrée ou clique sur la touche bas pour masquer la zone de liste d'une zone de liste déroulante. Ce message de notification est envoyé avant le message CBN_CLOSEUP pour indiquer que la sélection de l'utilisateur devrait être considérée valide. Le message de notification CBN_SELENDCANCEL ou CBN_SELENDOK est envoyé même si le message de notification CBN_CLOSEUP n'est pas envoyé (comme dans le cas d'une zone de liste déroulante avec le style CBS_SIMPLE ).
O&N_CBN_KILLFOCUSnbsp ; La liste déroulante perd le focus d'entrée.
O&N_CBN_SELCHANGEnbsp ; La sélection dans la liste déroulante d'une zone de liste modifiable est sur le point d'être modifié à la suite de l'utilisateur en cliquant dans la zone de liste ou de modification de la sélection en utilisant les touches de direction. Lors du traitement de ce message, le texte dans le contrôle d'édition de la liste déroulante peut seulement être récupéré via GetLBText ou une autre fonction similaire. GetWindowText ne peut pas être utilisé.
O&N_CBN_SETFOCUSnbsp ; La liste déroulante reçoit le focus d'entrée.
Si vous créez un objet CComboBox dans une boîte de dialogue (grâce à une ressource de boîte de dialogue), l'objet CComboBox est détruit automatiquement lorsque l'utilisateur ferme la boîte de dialogue.
Si vous incorporez un objet CComboBox dans un autre objet de la fenêtre, pas besoin de le détruire. Si vous créez l'objet CComboBox dans la pile, il est détruit automatiquement. Si vous créez l'objet CComboBox sur le tas à l'aide de la nouvelle fonction, vous devez appeler delete sur l'objet à détruire lorsque la zone de liste déroulante Windows est détruite.