Partager via


La classe CListBox

Fournit les fonctionnalités d'une zone de liste Windows.

Syntaxe

class CListBox : public CWnd

Membres

Constructeurs publics

Nom Description
CListBox::CListBox Construit un objet CListBox.

Méthodes publiques

Nom Description
CListBox::AddString Ajoute une chaîne à une zone de liste.
CListBox::CharToItem Remplacez la gestion personnalisée WM_CHAR des zones de liste de dessin propriétaire qui n’ont pas de chaînes.
CListBox::CompareItem Appelé par l’infrastructure pour déterminer la position d’un nouvel élément dans une zone de liste de dessin propriétaire triée.
CListBox::Create Crée la zone de liste Windows et l’attache à l’objet CListBox .
CListBox::DeleteItem Appelé par l’infrastructure lorsque l’utilisateur supprime un élément d’une zone de liste de dessin propriétaire.
CListBox::DeleteString Supprime une chaîne d’une zone de liste.
CListBox::Dir Ajoute des noms de fichiers, des lecteurs ou les deux du répertoire actif à une zone de liste.
CListBox::DrawItem Appelé par l’infrastructure lorsqu’un aspect visuel d’une zone de liste de dessin propriétaire change.
CListBox::FindString Recherche une chaîne dans une zone de liste.
CListBox::FindStringExact Recherche la première chaîne de zone de liste qui correspond à une chaîne spécifiée.
CListBox::GetAnchorIndex Récupère l’index de base zéro de l’élément d’ancrage actuel dans une zone de liste.
CListBox::GetCaretIndex Détermine l’index de l’élément qui a le rectangle de focus dans une zone de liste à sélection multiple.
CListBox::GetCount Retourne le nombre de chaînes dans une zone de liste.
CListBox::GetCurSel Retourne l’index de base zéro de la chaîne actuellement sélectionnée dans une zone de liste.
CListBox::GetHorizontalExtent Renvoie la largeur en pixels qu’une zone de liste peut faire défiler horizontalement.
CListBox::GetItemData Retourne une valeur associée à l’élément de zone de liste.
CListBox::GetItemDataPtr Retourne un pointeur vers un élément de zone de liste.
CListBox::GetItemHeight Détermine la hauteur des éléments dans une zone de liste.
CListBox::GetItemRect Retourne le rectangle englobant de l’élément de zone de liste tel qu’il est actuellement affiché.
CListBox::GetListBoxInfo Récupère le nombre d’éléments par colonne.
CListBox::GetLocale Récupère l’identificateur de paramètres régionaux d’une zone de liste.
CListBox::GetSel Retourne l’état de sélection d’un élément de zone de liste.
CListBox::GetSelCount Retourne le nombre de chaînes actuellement sélectionnées dans une zone de liste à sélection multiple.
CListBox::GetSelItems Retourne les index des chaînes actuellement sélectionnées dans une zone de liste.
CListBox::GetText Copie un élément de zone de liste dans une mémoire tampon.
CListBox::GetTextLen Retourne la longueur en octets d’un élément de zone de liste.
CListBox::GetTopIndex Retourne l’index de la première chaîne visible dans une zone de liste.
CListBox::InitStorage Préalloue des blocs de mémoire pour les éléments et chaînes de zone de liste.
CListBox::InsertString Insère une chaîne à un emplacement spécifique dans une zone de liste.
CListBox::ItemFromPoint Retourne l’index de l’élément de zone de liste le plus proche d’un point.
CListBox::MeasureItem Appelé par l’infrastructure lorsqu’une zone de liste de dessin propriétaire est créée pour déterminer les dimensions de zone de liste.
CListBox::ResetContent Efface toutes les entrées d’une zone de liste.
CListBox::SelectString Recherche et sélectionne une chaîne dans une zone de liste à sélection unique.
CListBox::SelItemRange Sélectionne ou désélectionne une plage de chaînes dans une zone de liste à sélection multiple.
CListBox::SetAnchorIndex Définit l’ancre dans une zone de liste à sélection multiple pour commencer une sélection étendue.
CListBox::SetCaretIndex Définit le rectangle de focus sur l’élément à l’index spécifié dans une zone de liste à sélection multiple.
CListBox::SetColumnWidth Définit la largeur de colonne d’une zone de liste multicolonne.
CListBox::SetCurSel Sélectionne une chaîne de zone de liste.
CListBox::SetHorizontalExtent Définit la largeur en pixels qu’une zone de liste peut faire défiler horizontalement.
CListBox::SetItemData Définit une valeur associée à l’élément de zone de liste.
CListBox::SetItemDataPtr Définit un pointeur vers l’élément de zone de liste.
CListBox::SetItemHeight Définit la hauteur des éléments dans une zone de liste.
CListBox::SetLocale Définit l’identificateur de paramètres régionaux d’une zone de liste.
CListBox::SetSel Sélectionne ou désélectionne un élément de zone de liste dans une zone de liste à sélection multiple.
CListBox::SetTabStops Définit les positions de taquet de tabulation dans une zone de liste.
CListBox::SetTopIndex Définit l’index de base zéro de la première chaîne visible dans une zone de liste.
CListBox::VKeyToItem Remplacez pour fournir une gestion personnalisée WM_KEYDOWN des zones de liste avec le jeu de LBS_WANTKEYBOARDINPUT styles.

Notes

Une zone de liste affiche une liste d’éléments, tels que des noms de fichiers, que l’utilisateur peut afficher et sélectionner.

Dans une zone de liste à sélection unique, l’utilisateur ne peut sélectionner qu’un seul élément. Dans une zone de liste à sélection multiple, une plage d’éléments peut être sélectionnée. Lorsque l’utilisateur sélectionne un élément, il est mis en surbrillance et la zone de liste envoie un message de notification à la fenêtre parente.

Vous pouvez créer une zone de liste à partir d’un modèle de boîte de dialogue ou directement dans votre code. Pour le créer directement, construisez l’objet CListBox , puis appelez la Create fonction membre pour créer le contrôle de zone de liste Windows et l’attacher à l’objet CListBox . Pour utiliser une zone de liste dans un modèle de boîte de dialogue, déclarez une variable de zone de liste dans votre classe de boîte de dialogue, puis utilisez DDX_Control la fonction de DoDataExchange votre classe de boîte de dialogue pour connecter la variable membre au contrôle. (cette opération est effectuée automatiquement lorsque vous ajoutez une variable de contrôle à votre classe de boîte de dialogue.)

La construction peut être un processus en une étape dans une classe dérivée de CListBox. Écrivez un constructeur pour la classe dérivée et appelez Create à partir du constructeur.

Si vous souhaitez gérer les messages de notification Windows envoyés par une zone de liste à son parent (généralement une classe dérivée de CDialog), ajoutez une entrée de mappage de messages et une fonction membre de gestionnaire de messages à la classe parente pour chaque message.

Chaque entrée de carte de messages prend la forme suivante :

ON_Notification( id, memberFxn )

id spécifie l’ID de fenêtre enfant du contrôle de zone de liste envoyant la notification et memberFxn est le nom de la fonction membre parente que vous avez écrite pour gérer la notification.

Le prototype de fonction parent est le suivant :

afx_msg void memberFxn( );

Voici une liste des entrées de mappage de messages potentielles et une description des cas dans lesquels elles seraient envoyées au parent :

  • ON_LBN_DBLCLK L’utilisateur double-clique sur une chaîne dans une zone de liste. Seule une zone de liste contenant le LBS_NOTIFY style envoie ce message de notification.

  • ON_LBN_ERRSPACE La zone de liste ne peut pas allouer suffisamment de mémoire pour répondre à la demande.

  • ON_LBN_KILLFOCUS La zone de liste perd le focus d’entrée.

  • ON_LBN_SELCANCEL La sélection actuelle de la zone de liste est annulée. Ce message est envoyé uniquement lorsqu’une zone de liste a le LBS_NOTIFY style.

  • ON_LBN_SELCHANGE La sélection dans la zone de liste a changé. Cette notification n’est pas envoyée si la sélection est modifiée par la CListBox::SetCurSel fonction membre. Cette notification s’applique uniquement à une zone de liste qui a le LBS_NOTIFY style. Le LBN_SELCHANGE message de notification est envoyé pour une zone de liste à sélection multiple chaque fois que l’utilisateur appuie sur une touche de direction, même si la sélection ne change pas.

  • ON_LBN_SETFOCUS La zone de liste reçoit le focus d’entrée.

  • ON_WM_CHARTOITEM Une zone de liste de dessin propriétaire qui n’a aucune chaîne reçoit un WM_CHAR message.

  • ON_WM_VKEYTOITEM Une zone de liste avec le LBS_WANTKEYBOARDINPUT style reçoit un WM_KEYDOWN message.

Si vous créez un CListBox objet dans une boîte de dialogue (via une ressource de boîte de dialogue), l’objet CListBox est automatiquement détruit lorsque l’utilisateur ferme la boîte de dialogue.

Si vous créez un CListBox objet dans une fenêtre, vous devrez peut-être détruire l’objet CListBox . Si vous créez l’objet CListBox sur la pile, il est détruit automatiquement. Si vous créez l’objet CListBox sur le tas à l’aide de la new fonction, vous devez appeler delete l’objet pour le détruire lorsque l’utilisateur ferme la fenêtre parente.

Si vous allouez une mémoire dans l’objet CListBox , remplacez le CListBox destructeur pour supprimer l’allocation.

Hiérarchie d'héritage

CObject

CCmdTarget

CWnd

CListBox

Spécifications

En-tête : afxwin.h

CListBox::AddString

Ajoute une chaîne à une zone de liste.

int AddString(LPCTSTR lpszItem);

Paramètres

lpszItem
Pointe vers la chaîne terminée par null à ajouter.

Valeur de retour

Index de base zéro de la chaîne dans la zone de liste. La valeur de retour est LB_ERR si une erreur se produit ; la valeur de retour est LB_ERRSPACE si un espace insuffisant est disponible pour stocker la nouvelle chaîne.

Notes

Si la zone de liste n’a pas été créée avec le LBS_SORT style, la chaîne est ajoutée à la fin de la liste. Sinon, la chaîne est insérée dans la liste et la liste est triée. Si la zone de liste a été créée avec le LBS_SORT style, mais pas le LBS_HASSTRINGS style, l’infrastructure trie la liste par un ou plusieurs appels à la CompareItem fonction membre.

Permet InsertString d’insérer une chaîne dans un emplacement spécifique dans la zone de liste.

Exemple

// Add 10 items to the list box.
CString str;
for (int i = 0; i < 10; i++)
{
   str.Format(_T("item string %d"), i);
   m_myListBox.AddString(str);
}

CListBox::CharToItem

Appelé par l’infrastructure lorsque la fenêtre parente de la zone de liste reçoit un WM_CHARTOITEM message de la zone de liste.

virtual int CharToItem(
    UINT nKey,
    UINT nIndex);

Paramètres

nKey
Code ANSI du caractère tapé par l’utilisateur.

nIndex
Position actuelle du point d’insertion de la zone de liste.

Valeur de retour

Renvoie - 1 ou - 2 pour aucune action supplémentaire ou un nombre non négatif pour spécifier un index d’un élément de zone de liste sur lequel effectuer l’action par défaut pour la séquence de touches. L’implémentation par défaut retourne - 1.

Notes

Le WM_CHARTOITEM message est envoyé par la zone de liste lorsqu’il reçoit un WM_CHAR message, mais uniquement si la zone de liste répond à tous ces critères :

  • Zone de liste de dessin propriétaire.

  • N’a pas le jeu de LBS_HASSTRINGS style.

  • Possède au moins un élément.

Vous ne devez jamais appeler cette fonction vous-même. Remplacez cette fonction pour fournir votre propre gestion personnalisée des messages clavier.

Dans votre remplacement, vous devez retourner une valeur pour indiquer à l’infrastructure quelle action vous avez effectuée. Une valeur de retour de - 1 ou - 2 indique que vous avez géré tous les aspects de la sélection de l’élément et ne nécessite aucune action supplémentaire par la zone de liste. Avant de retourner - 1 ou - 2, vous pouvez définir la sélection ou déplacer la carete ou les deux. Pour définir la sélection, utilisez SetCurSel ou SetSel. Pour déplacer le caret, utilisez SetCaretIndex.

Une valeur de retour de 0 ou supérieure spécifie l’index d’un élément dans la zone de liste et indique que la zone de liste doit effectuer l’action par défaut pour la séquence de touches sur l’élément donné.

Exemple

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on a numeric key and up one item
// on an alphabetic key. The list box control was created with the
// following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::CharToItem(UINT nChar, UINT nIndex)
{
   // On a numeric key, move the caret up one item.
   if (isdigit(nChar) && (nIndex > 0))
   {
      SetCaretIndex(nIndex - 1);
   }
   // On an alphabetic key, move the caret down one item.
   else if (isalpha(nChar) && (nIndex < (UINT)GetCount()))
   {
      SetCaretIndex(nIndex + 1);
   }

   // Do not perform any default processing.
   return -1;
}

CListBox::CListBox

Construit un objet CListBox.

CListBox();

Notes

Vous construisez un CListBox objet en deux étapes. Tout d’abord, appelez le constructeur ClistBox , puis appelez Create, qui initialise la zone de liste Windows et l’attache au CListBox.

Exemple

// Declare a local CListBox object.
CListBox myListBox;

// Declare a dynamic CListBox object.
CListBox *pmyListBox = new CListBox;

CListBox::CompareItem

Appelé par l’infrastructure pour déterminer la position relative d’un nouvel élément dans une zone de liste de dessin propriétaire triée.

virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);

Paramètres

lpCompareItemStruct
Pointeur long vers une COMPAREITEMSTRUCT structure.

Valeur de retour

Indique la position relative des deux éléments décrits dans la COMPAREITEMSTRUCT structure. Il peut s’agir de l’une des valeurs suivantes :

Valeur Signification
-1 L’élément 1 trie avant l’élément 2.
0 L’élément 1 et l’élément 2 trient de la même façon.
1 L’élément 1 trie après l’élément 2.

Consultez CWnd::OnCompareItem une description de la COMPAREITEMSTRUCT structure.

Notes

Par défaut, cette fonction membre ne fait rien. Si vous créez une zone de liste de dessin propriétaire avec le LBS_SORT style, vous devez remplacer cette fonction membre pour aider l’infrastructure à trier les nouveaux éléments ajoutés à la zone de liste.

Exemple

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example compares two items using _tcscmp to sort items in reverse
// alphabetical order. The list box control was created with the
// following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
   ASSERT(lpCompareItemStruct->CtlType == ODT_LISTBOX);
   LPCTSTR lpszText1 = (LPCTSTR)lpCompareItemStruct->itemData1;
   ASSERT(lpszText1 != NULL);
   LPCTSTR lpszText2 = (LPCTSTR)lpCompareItemStruct->itemData2;
   ASSERT(lpszText2 != NULL);

   return _tcscmp(lpszText2, lpszText1);
}

CListBox::Create

Crée la zone de liste Windows et l’attache à l’objet CListBox .

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

Paramètres

dwStyle
Spécifie le style de la zone de liste. Appliquez n’importe quelle combinaison de styles de zone de liste à la zone.

rect
Spécifie la taille et la position de la zone de liste. Peut être un CRect objet ou une RECT structure.

pParentWnd
Spécifie la fenêtre parente de la zone de liste (généralement un CDialog objet). Il ne doit pas être NULL.

nID
Spécifie l’ID de contrôle de la zone de liste.

Valeur de retour

Valeur différente de zéro cas de réussite ; sinon, 0.

Notes

Vous construisez un CListBox objet en deux étapes. Tout d’abord, appelez le constructeur, puis appelez Create, qui initialise la zone de liste Windows et l’attache à l’objet CListBox .

Lors Create de l’exécution, Windows envoie les WM_NCCREATEmessages , et WM_CREATEWM_NCCALCSIZEWM_GETMINMAXINFO les messages à la zone de liste.

Ces messages sont gérés par défaut par les OnNcCreatefonctions membres et OnNcCalcSizeOnGetMinMaxInfo , OnCreatepar défaut, dans la classe de CWnd base. Pour étendre la gestion des messages par défaut, dérivez une classe de CListBox, ajoutez un mappage de messages à la nouvelle classe et remplacez les fonctions membres du gestionnaire de messages précédentes. Remplacez OnCreate, par exemple, l’initialisation nécessaire pour une nouvelle classe.

Appliquez les styles de fenêtre suivants à un contrôle de zone de liste.

  • WS_CHILD Toujours

  • WS_VISIBLE Habituellement

  • WS_DISABLED Rarement

  • WS_VSCROLL Pour ajouter une barre de défilement verticale

  • WS_HSCROLL Pour ajouter une barre de défilement horizontale

  • WS_GROUP Pour regrouper les contrôles

  • WS_TABSTOP Pour autoriser la tabulation à ce contrôle

Exemple

// pParentWnd is a pointer to the parent window.
m_myListBox.Create(WS_CHILD | WS_VISIBLE | LBS_STANDARD | WS_HSCROLL,
                   CRect(10, 10, 200, 200), pParentWnd, IDC_MYLISTBOX);

CListBox::DeleteItem

Appelé par l’infrastructure lorsque l’utilisateur supprime un élément d’un objet de dessin CListBox propriétaire ou détruit la zone de liste.

virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);

Paramètres

lpDeleteItemStruct
Pointeur long vers une structure Windows DELETEITEMSTRUCT qui contient des informations sur l’élément supprimé.

Notes

L’implémentation par défaut de cette fonction est sans effet. Remplacez cette fonction pour redessiner une zone de liste de dessin propriétaire si nécessaire.

Consultez CWnd::OnDeleteItem une description de la DELETEITEMSTRUCT structure.

Exemple

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example simply frees the item's text. The list box control was created
// with the following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct)
{
   ASSERT(lpDeleteItemStruct->CtlType == ODT_LISTBOX);
   LPVOID lpszText = (LPVOID)lpDeleteItemStruct->itemData;
   ASSERT(lpszText != NULL);

   free(lpszText);

   CListBox::DeleteItem(lpDeleteItemStruct);
}

CListBox::DeleteString

Supprime l’élément en position nIndex de la zone de liste.

int DeleteString(UINT nIndex);

Paramètres

nIndex
Spécifie l’index de base zéro de la chaîne à supprimer.

Valeur de retour

Nombre de chaînes restantes dans la liste. La valeur de retour est LB_ERR si nIndex spécifie un index supérieur au nombre d’éléments de la liste.

Notes

Tous les éléments suivants nIndex se déplacent maintenant vers le bas d’une position. Par exemple, si une zone de liste contient deux éléments, la suppression du premier élément entraîne la première position de l’élément restant. nIndex=0 pour l’élément à la première position.

Exemple

// Delete every other item from the list box.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.DeleteString(i);
}

CListBox::Dir

Ajoute une liste de noms de fichiers, de lecteurs ou des deux à une zone de liste.

int Dir(
    UINT attr,
    LPCTSTR lpszWildCard);

Paramètres

attr
Peut être n’importe quelle combinaison des enum valeurs décrites dans CFile::GetStatus, ou toute combinaison des valeurs suivantes :

Valeur Signification
0x0000 Le fichier peut être lu ou écrit dans.
0x0001 Le fichier peut être lu à partir de, mais pas écrit dans.
0x0002 Le fichier est masqué et n’apparaît pas dans une liste de répertoires.
0x0004 Le fichier est un fichier système.
0x0010 Nom spécifié par lpszWildCard un répertoire.
0x0020 Le fichier a été archivé.
0x4000 Incluez tous les lecteurs qui correspondent au nom spécifié par lpszWildCard.
0x8000 Indicateur exclusif. Si l’indicateur exclusif est défini, seuls les fichiers du type spécifié sont répertoriés. Dans le cas contraire, les fichiers du type spécifié sont répertoriés en plus des fichiers « normaux ».

lpszWildCard
Pointe vers une chaîne de spécification de fichier. La chaîne peut contenir des caractères génériques (par exemple, *.*).

Valeur de retour

Index de base zéro du dernier nom de fichier ajouté à la liste. La valeur de retour est LB_ERR si une erreur se produit ; la valeur de retour est LB_ERRSPACE si un espace insuffisant est disponible pour stocker les nouvelles chaînes.

Exemple

// Add all the files and directories in the windows directory.
TCHAR lpszWinPath[MAX_PATH], lpszOldPath[MAX_PATH];
::GetWindowsDirectory(lpszWinPath, MAX_PATH);

::GetCurrentDirectory(MAX_PATH, lpszOldPath);
::SetCurrentDirectory(lpszWinPath);

m_myListBox.ResetContent();
m_myListBox.Dir(DDL_READWRITE | DDL_DIRECTORY, _T("*.*"));

::SetCurrentDirectory(lpszOldPath);

CListBox::DrawItem

Appelé par l’infrastructure lorsqu’un aspect visuel d’une zone de liste de dessin propriétaire change.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

Paramètres

lpDrawItemStruct
Pointeur long vers une DRAWITEMSTRUCT structure qui contient des informations sur le type de dessin requis.

Notes

Les membres et itemState les itemAction membres de la DRAWITEMSTRUCT structure définissent l’action de dessin à effectuer.

Par défaut, cette fonction membre ne fait rien. Remplacez cette fonction membre pour implémenter le dessin pour un objet de dessin CListBox propriétaire. L’application doit restaurer tous les objets GDI (Graphics Device Interface) sélectionnés pour le contexte d’affichage fourni lpDrawItemStruct avant la fin de cette fonction membre.

Consultez CWnd::OnDrawItem une description de la DRAWITEMSTRUCT structure.

Exemple

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example draws an item's text centered vertically and horizontally. The
// list box control was created with the following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
   ASSERT(lpDrawItemStruct->CtlType == ODT_LISTBOX);
   LPCTSTR lpszText = (LPCTSTR)lpDrawItemStruct->itemData;
   ASSERT(lpszText != NULL);
   CDC dc;

   dc.Attach(lpDrawItemStruct->hDC);

   // Save these value to restore them when done drawing.
   COLORREF crOldTextColor = dc.GetTextColor();
   COLORREF crOldBkColor = dc.GetBkColor();

   // If this item is selected, set the background color
   // and the text color to appropriate values. Also, erase
   // rect by filling it with the background color.
   if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&
       (lpDrawItemStruct->itemState & ODS_SELECTED))
   {
      dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
      dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
      dc.FillSolidRect(&lpDrawItemStruct->rcItem,
                       ::GetSysColor(COLOR_HIGHLIGHT));
   }
   else
   {
      dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);
   }

   // If this item has the focus, draw a red frame around the
   // item's rect.
   if ((lpDrawItemStruct->itemAction | ODA_FOCUS) &&
       (lpDrawItemStruct->itemState & ODS_FOCUS))
   {
      CBrush br(RGB(255, 0, 0));
      dc.FrameRect(&lpDrawItemStruct->rcItem, &br);
   }

   // Draw the text.
   dc.DrawText(
       lpszText,
       (int)_tcslen(lpszText),
       &lpDrawItemStruct->rcItem,
       DT_CENTER | DT_SINGLELINE | DT_VCENTER);

   // Reset the background color and the text color back to their
   // original values.
   dc.SetTextColor(crOldTextColor);
   dc.SetBkColor(crOldBkColor);

   dc.Detach();
}

CListBox::FindString

Recherche la première chaîne dans une zone de liste qui contient le préfixe spécifié sans modifier la sélection de zone de liste.

int FindString(
    int nStartAfter,
    LPCTSTR lpszItem) const;

Paramètres

nStartAfter
Contient l’index de base zéro de l’élément avant le premier élément à rechercher. Lorsque la recherche atteint le bas de la zone de liste, elle passe du haut de la zone de liste à l’élément spécifié par nStartAfter. Si nStartAfter la valeur est -1, la zone de liste entière est recherchée à partir du début.

lpszItem
Pointe vers la chaîne terminée par null qui contient le préfixe à rechercher. La recherche est indépendante de la casse. Cette chaîne peut donc contenir n’importe quelle combinaison de lettres majuscules et minuscules.

Valeur de retour

Index de base zéro de l’élément correspondant, ou LB_ERR si la recherche a échoué.

Notes

Utilisez la SelectString fonction membre pour rechercher et sélectionner une chaîne.

Exemple

// The string to match.
LPCTSTR lpszmyString = _T("item");

// Delete all items that begin with the specified string.
int nIndex = 0;
while ((nIndex = m_myListBox.FindString(nIndex, lpszmyString)) != LB_ERR)
{
   m_myListBox.DeleteString(nIndex);
}

CListBox::FindStringExact

Recherche la première chaîne de zone de liste qui correspond à la chaîne spécifiée dans lpszFind.

int FindStringExact(
    int nIndexStart,
    LPCTSTR lpszFind) const;

Paramètres

nIndexStart
Spécifie l’index de base zéro de l’élément avant que le premier élément soit recherché. Lorsque la recherche atteint le bas de la zone de liste, elle passe du haut de la zone de liste à l’élément spécifié par nIndexStart. Si nIndexStart la valeur est -1, la zone de liste entière est recherchée à partir du début.

lpszFind
Pointe vers la chaîne terminée par null pour rechercher. Cette chaîne peut contenir un nom de fichier complet, y compris l’extension. La recherche n’est pas sensible à la casse. La chaîne peut donc contenir n’importe quelle combinaison de lettres majuscules et minuscules.

Valeur de retour

Index de l’élément correspondant ou LB_ERR si la recherche a échoué.

Notes

Si la zone de liste a été créée avec un style de dessin propriétaire mais sans le LBS_HASSTRINGS style, la FindStringExact fonction membre tente de faire correspondre la valeur doubleword par rapport à la valeur de lpszFind.

Exemple

// The string to match.
LPCTSTR lpszmyString = _T("item string 3");

// Delete all items that exactly match the specified string.
int nIndex = 0;
while ((nIndex = m_myListBox.FindStringExact(nIndex, lpszmyString)) != LB_ERR)
{
   m_myListBox.DeleteString(nIndex);
}

CListBox::GetAnchorIndex

Récupère l’index de base zéro de l’élément d’ancrage actuel dans la zone de liste.

int GetAnchorIndex() const;

Valeur de retour

Index de l’élément d’ancrage actuel, s’il réussit ; sinon, LB_ERR.

Notes

Dans une zone de liste à sélection multiple, l’élément d’ancrage est le premier ou le dernier élément d’un bloc d’éléments sélectionnés contigus.

Exemple

Consultez l’exemple pour CListBox::SetAnchorIndex.

CListBox::GetCaretIndex

Détermine l’index de l’élément qui a le rectangle de focus dans une zone de liste à sélection multiple.

int GetCaretIndex() const;

Valeur de retour

Index de base zéro de l’élément qui a le rectangle de focus dans une zone de liste. Si la zone de liste est une zone de liste à sélection unique, la valeur de retour est l’index de l’élément sélectionné, le cas échéant.

Notes

L’élément peut ou non être sélectionné.

Exemple

Consultez l’exemple pour CListBox::SetCaretIndex.

CListBox::GetCount

Récupère le nombre d’éléments dans une zone de liste.

int GetCount() const;

Valeur de retour

Nombre d’éléments dans la zone de liste ou LB_ERR si une erreur se produit.

Notes

Le nombre retourné est supérieur à la valeur d’index du dernier élément (l’index est de base zéro).

Exemple

// Add 10 items to the list box.
CString str;
for (int i = 0; i < 10; i++)
{
   str.Format(_T("item %d"), i);
   m_myListBox.AddString(str);
}

// Verify that 10 items were added to the list box.
ASSERT(m_myListBox.GetCount() == 10);

CListBox::GetCurSel

Récupère l’index de base zéro de l’élément actuellement sélectionné, le cas échéant, dans une zone de liste de sélection unique.

int GetCurSel() const;

Valeur de retour

Index de base zéro de l’élément actuellement sélectionné s’il s’agit d’une zone de liste à sélection unique. Il s’agit LB_ERR si aucun élément n’est actuellement sélectionné.

Dans une zone de liste à sélection multiple, index de l’élément qui a le focus.

Notes

N’appelez GetCurSel pas de zone de liste à sélection multiple. Utilisez CListBox::GetSelItems à la place.

Exemple

// Select the next item of the currently selected one.
int nIndex = m_myListBox.GetCurSel();
int nCount = m_myListBox.GetCount();
if ((nIndex != LB_ERR) && (nCount > 1))
{
   if (++nIndex < nCount)
      m_myListBox.SetCurSel(nIndex);
   else
      m_myListBox.SetCurSel(0);
}

CListBox::GetHorizontalExtent

Récupère à partir de la zone de liste la largeur en pixels par laquelle elle peut faire défiler horizontalement.

int GetHorizontalExtent() const;

Valeur de retour

Largeur défilable de la zone de liste, en pixels.

Notes

Cela s’applique uniquement si la zone de liste a une barre de défilement horizontale.

Exemple

// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
CDC *pDC = m_myListBox.GetDC();
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.GetText(i, str);
   sz = pDC->GetTextExtent(str);

   if (sz.cx > dx)
      dx = sz.cx;
}
m_myListBox.ReleaseDC(pDC);

// Set the horizontal extent only if the current extent is not large enough.
if (m_myListBox.GetHorizontalExtent() < dx)
{
   m_myListBox.SetHorizontalExtent(dx);
   ASSERT(m_myListBox.GetHorizontalExtent() == dx);
}

CListBox::GetItemData

Récupère la valeur doubleword fournie par l’application associée à l’élément de zone de liste spécifié.

DWORD_PTR GetItemData(int nIndex) const;

Paramètres

nIndex
Spécifie l’index de base zéro de l’élément dans la zone de liste.

Valeur de retour

Valeur associée à l’élément, ou LB_ERR si une erreur se produit.

Notes

La valeur doubleword était le dwItemData paramètre d’un SetItemData appel.

Exemple

// If any item's data is equal to zero then reset it to -1.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   if (m_myListBox.GetItemData(i) == 0)
   {
      m_myListBox.SetItemData(i, (DWORD)-1);
   }
}

CListBox::GetItemDataPtr

Récupère la valeur 32 bits fournie par l’application associée à l’élément de zone de liste spécifié en tant que pointeur (void *).

void* GetItemDataPtr(int nIndex) const;

Paramètres

nIndex
Spécifie l’index de base zéro de l’élément dans la zone de liste.

Valeur de retour

Récupère un pointeur ou -1 si une erreur se produit.

Exemple

LPVOID lpmyPtr = pParentWnd;

// Check all the items in the list box; if an item's
// data pointer is equal to my pointer then reset it to NULL.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   if (m_myListBox.GetItemDataPtr(i) == lpmyPtr)
   {
      m_myListBox.SetItemDataPtr(i, NULL);
   }
}

CListBox::GetItemHeight

Détermine la hauteur des éléments dans une zone de liste.

int GetItemHeight(int nIndex) const;

Paramètres

nIndex
Spécifie l’index de base zéro de l’élément dans la zone de liste. Ce paramètre est utilisé uniquement si la zone de liste a le LBS_OWNERDRAWVARIABLE style ; sinon, elle doit être définie sur 0.

Valeur de retour

Hauteur, en pixels, des éléments de la zone de liste. Si la zone de liste a le LBS_OWNERDRAWVARIABLE style, la valeur de retour est la hauteur de l’élément spécifié par nIndex. Si une erreur se produit, la valeur de retour est LB_ERR.

Exemple

// Set the height of every item so the item
// is completely visible.
CString str;
CSize sz;
CDC *pDC = m_myListBox.GetDC();
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.GetText(i, str);
   sz = pDC->GetTextExtent(str);

   // Only want to set the item height if the current height
   // is not big enough.
   if (m_myListBox.GetItemHeight(i) < sz.cy)
      m_myListBox.SetItemHeight(i, sz.cy);
}
m_myListBox.ReleaseDC(pDC);

CListBox::GetItemRect

Récupère les dimensions du rectangle qui limite un élément de zone de liste tel qu’il est actuellement affiché dans la fenêtre de zone de liste.

int GetItemRect(
    int nIndex,
    LPRECT lpRect) const;

Paramètres

nIndex
Spécifie l’index de base zéro de l’élément.

lpRect
Spécifie un pointeur long vers une RECT structure qui reçoit les coordonnées clientes de zone de liste de l’élément.

Valeur de retour

LB_ERR si une erreur se produit.

Exemple

// Dump all of the items bounds.
CString str;
RECT r;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.GetItemRect(i, &r);

   str.Format(_T("item %d: left = %d, top = %d, right = %d, ")
              _T("bottom = %d\r\n"),
              i,
              r.left,
              r.top,
              r.right,
              r.bottom);
   AFXDUMP(str);
}

CListBox::GetListBoxInfo

Récupère le nombre d’éléments par colonne.

DWORD GetListBoxInfo() const;

Valeur de retour

Nombre d’éléments par colonne de l’objet CListBox .

Notes

Cette fonction membre émule les fonctionnalités du LB_GETLISTBOXINFO message, comme décrit dans le Kit de développement logiciel (SDK) Windows.

CListBox::GetLocale

Récupère les paramètres régionaux utilisés par la zone de liste.

LCID GetLocale() const;

Valeur de retour

Valeur de l’identificateur de paramètres régionaux (LCID) pour les chaînes dans la zone de liste.

Notes

Les paramètres régionaux sont utilisés, par exemple, pour déterminer l’ordre de tri des chaînes dans une zone de liste triée.

Exemple

Consultez l’exemple pour CListBox::SetLocale.

CListBox::GetSel

Récupère l’état de sélection d’un élément.

int GetSel(int nIndex) const;

Paramètres

nIndex
Spécifie l’index de base zéro de l’élément.

Valeur de retour

Nombre positif si l’élément spécifié est sélectionné ; sinon, c’est 0. La valeur de retour est LB_ERR si une erreur se produit.

Notes

Cette fonction membre fonctionne avec des zones de liste à sélection unique et multiple.

Pour récupérer l’index de l’élément de zone de liste actuellement sélectionné, utilisez CListBox::GetCurSel.

Exemple

// Dump all of the items select state.
CString str;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   str.Format(_T("item %d: select state is %s\r\n"),
              i,
              m_myListBox.GetSel(i) > 0 ? _T("true") : _T("false"));
   AFXDUMP(str);
}

CListBox::GetSelCount

Récupère le nombre total d’éléments sélectionnés dans une zone de liste à sélection multiple.

int GetSelCount() const;

Valeur de retour

Nombre d’éléments sélectionnés dans une zone de liste. Si la zone de liste est une zone de liste à sélection unique, la valeur de retour est LB_ERR.

Exemple

Consultez l’exemple pour CListBox::GetSelItems.

CListBox::GetSelItems

Remplit une mémoire tampon avec un tableau d’entiers qui spécifie le nombre d’éléments sélectionnés dans une zone de liste à sélection multiple.

int GetSelItems(
    int nMaxItems,
    LPINT rgIndex) const;

Paramètres

nMaxItems
Spécifie le nombre maximal d’éléments sélectionnés dont les nombres d’éléments doivent être placés dans la mémoire tampon.

rgIndex
Spécifie un pointeur vers une mémoire tampon suffisamment grande pour le nombre d’entiers spécifié par nMaxItems.

Valeur de retour

Nombre réel d’éléments placés dans la mémoire tampon. Si la zone de liste est une zone de liste à sélection unique, la valeur de retour est LB_ERR.

Exemple

// Get the indexes of all the selected items.
int nCount = m_myODListBox.GetSelCount();
CArray<int, int> aryListBoxSel;

aryListBoxSel.SetSize(nCount);
m_myODListBox.GetSelItems(nCount, aryListBoxSel.GetData());

// Dump the selection array.
AFXDUMP(aryListBoxSel);

CListBox::GetText

Obtient une chaîne d’une zone de liste.

int GetText(
    int nIndex,
    LPTSTR lpszBuffer) const;

void GetText(
    int nIndex,
    CString& rString) const;

Paramètres

nIndex
Spécifie l’index de base zéro de la chaîne à récupérer.

lpszBuffer
Pointe vers la mémoire tampon qui reçoit la chaîne. La mémoire tampon doit avoir suffisamment d’espace pour la chaîne et un caractère null de fin. La taille de la chaîne peut être déterminée à l’avance en appelant la GetTextLen fonction membre.

rString
Référence à un objet CString.

Valeur de retour

Longueur (en octets) de la chaîne, à l’exclusion du caractère null de fin. Si nIndex elle ne spécifie pas d’index valide, la valeur de retour est LB_ERR.

Notes

La deuxième forme de cette fonction membre remplit un CString objet avec le texte de chaîne.

Exemple

// Dump all of the items in the list box.
CString str, str2;
int n;
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   n = m_myListBox.GetTextLen(i);
   m_myListBox.GetText(i, str.GetBuffer(n));
   str.ReleaseBuffer();

   str2.Format(_T("item %d: %s\r\n"), i, str.GetBuffer(0));
   AFXDUMP(str2);
}

CListBox::GetTextLen

Obtient la longueur d’une chaîne dans un élément de zone de liste.

int GetTextLen(int nIndex) const;

Paramètres

nIndex
Spécifie l’index de base zéro de la chaîne.

Valeur de retour

Longueur de la chaîne en caractères, à l’exclusion du caractère null de fin. Si nIndex elle ne spécifie pas d’index valide, la valeur de retour est LB_ERR.

Exemple

Consultez l’exemple pour CListBox::GetText.

CListBox::GetTopIndex

Récupère l’index de base zéro du premier élément visible dans une zone de liste.

int GetTopIndex() const;

Valeur de retour

Index de base zéro du premier élément visible dans une zone de liste en cas de réussite, LB_ERR sinon.

Notes

Initialement, l’élément 0 se trouve en haut de la zone de liste, mais si la zone de liste est défiler, un autre élément peut se trouver en haut.

Exemple

// Want an item in the bottom half to be the first visible item.
int n = m_myListBox.GetCount() / 2;
if (m_myListBox.GetTopIndex() < n)
{
   m_myListBox.SetTopIndex(n);
   ASSERT(m_myListBox.GetTopIndex() == n);
}

CListBox::InitStorage

Alloue de la mémoire pour le stockage d’éléments de zone de liste.

int InitStorage(
    int nItems,
    UINT nBytes);

Paramètres

nItems
Spécifie le nombre d’éléments à ajouter.

nBytes
Spécifie la quantité de mémoire, en octets, à allouer pour les chaînes d’élément.

Valeur de retour

Si elle réussit, le nombre maximal d’éléments que la zone de liste peut stocker avant qu’une réaffectation de mémoire soit nécessaire, sinon, ce LB_ERRSPACEqui signifie que la mémoire n’est pas suffisante est disponible.

Notes

Appelez cette fonction avant d’ajouter un grand nombre d’éléments à un CListBox.

Cette fonction permet d’accélérer l’initialisation des zones de liste qui ont un grand nombre d’éléments (plus de 100). Il prélocalise la quantité de mémoire spécifiée afin que les fonctions suivantes AddStringInsertStringDir prennent le plus court temps possible. Vous pouvez utiliser des estimations pour les paramètres. Si vous dépassez la mémoire, une mémoire supplémentaire est allouée ; si vous sous-estimez, l’allocation normale est utilisée pour les éléments qui dépassent le montant préalloué.

Windows 95/98 uniquement : le nItems paramètre est limité à des valeurs 16 bits. Cela signifie que les zones de liste ne peuvent pas contenir plus de 32 767 éléments. Bien que le nombre d’éléments soit limité, la taille totale des éléments d’une zone de liste est limitée uniquement par la mémoire disponible.

Exemple

// Initialize the storage of the list box to be 256 strings with
// about 10 characters per string, performance improvement.
int n = m_myListBox.InitStorage(256, 16 * sizeof(TCHAR));
ASSERT(n != LB_ERRSPACE);

// Add 256 items to the list box.
CString str;
for (int i = 0; i < 256; i++)
{
   str.Format(_T("item string %d"), i);
   m_myListBox.AddString(str);
}

CListBox::InsertString

Insère une chaîne dans la zone de liste.

int InsertString(
    int nIndex,
    LPCTSTR lpszItem);

Paramètres

nIndex
Spécifie l’index de base zéro de la position à insérer la chaîne. Si ce paramètre est -1, la chaîne est ajoutée à la fin de la liste.

lpszItem
Pointe vers la chaîne terminée par le caractère null qui doit être insérée.

Valeur de retour

Index de base zéro de la position à laquelle la chaîne a été insérée. La valeur de retour est LB_ERR si une erreur se produit ; la valeur de retour est LB_ERRSPACE si un espace insuffisant est disponible pour stocker la nouvelle chaîne.

Notes

Contrairement à la AddString fonction membre, InsertString n’entraîne pas le tri d’une liste avec le LBS_SORT style.

Exemple

// Insert items in between existing items.
CString str;
int n = m_myListBox.GetCount();
for (int i = 0; i < n; i++)
{
   str.Format(_T("item string %c"), (char)('A' + i));
   m_myListBox.InsertString(2 * i, str);
}

CListBox::ItemFromPoint

Détermine l’élément de zone de liste le plus proche du point spécifié dans pt.

UINT ItemFromPoint(
    CPoint pt,
    BOOL& bOutside) const;

Paramètres

pt
Point pour lequel rechercher l’élément le plus proche, spécifié par rapport au coin supérieur gauche de la zone cliente de la zone de liste.

bOutside
Référence à une BOOL variable qui sera définie TRUE sur si pt elle se trouve en dehors de la zone cliente de la zone de liste, FALSE si pt elle se trouve dans la zone cliente de la zone de liste.

Valeur de retour

Index de l’élément le plus proche au point spécifié dans pt.

Notes

Vous pouvez utiliser cette fonction pour déterminer l’élément de zone de liste sur lequel le curseur de la souris se déplace.

Exemple

Consultez l’exemple pour CListBox::SetAnchorIndex.

CListBox::MeasureItem

Appelé par l’infrastructure lorsqu’une zone de liste avec un style de dessin propriétaire est créée.

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

Paramètres

lpMeasureItemStruct
Pointeur long vers une MEASUREITEMSTRUCT structure.

Notes

Par défaut, cette fonction membre ne fait rien. Remplacez cette fonction membre et renseignez la MEASUREITEMSTRUCT structure pour informer Windows des dimensions de zone de liste. Si la zone de liste est créée avec le LBS_OWNERDRAWVARIABLE style, l’infrastructure appelle cette fonction membre pour chaque élément de la zone de liste. Sinon, ce membre n’est appelé qu’une seule fois.

Pour plus d’informations sur l’utilisation du LBS_OWNERDRAWFIXED style dans une zone de liste de dessin propriétaire créée avec la SubclassDlgItem fonction membre de CWnd, consultez la discussion dans la note technique 14.

Consultez CWnd::OnMeasureItem une description de la MEASUREITEMSTRUCT structure.

Exemple

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example measures an item and sets the height of the item to twice the
// vertical extent of its text. The list box control was created with the
// following code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
void CMyODListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
   ASSERT(lpMeasureItemStruct->CtlType == ODT_LISTBOX);
   LPCTSTR lpszText = (LPCTSTR)lpMeasureItemStruct->itemData;
   ASSERT(lpszText != NULL);
   CSize sz;
   CDC *pDC = GetDC();

   sz = pDC->GetTextExtent(lpszText);

   ReleaseDC(pDC);

   lpMeasureItemStruct->itemHeight = 2 * sz.cy;
}

CListBox::ResetContent

Supprime tous les éléments d’une zone de liste.

void ResetContent();

Exemple

// Delete all the items from the list box.
m_myListBox.ResetContent();
ASSERT(m_myListBox.GetCount() == 0);

CListBox::SelectString

Recherche un élément de zone de liste qui correspond à la chaîne spécifiée et, si un élément correspondant est trouvé, il sélectionne l’élément.

int SelectString(
    int nStartAfter,
    LPCTSTR lpszItem);

Paramètres

nStartAfter
Contient l’index de base zéro de l’élément avant le premier élément à rechercher. Lorsque la recherche atteint le bas de la zone de liste, elle passe du haut de la zone de liste à l’élément spécifié par nStartAfter. Si nStartAfter la valeur est -1, la zone de liste entière est recherchée à partir du début.

lpszItem
Pointe vers la chaîne terminée par null qui contient le préfixe à rechercher. La recherche est indépendante de la casse. Cette chaîne peut donc contenir n’importe quelle combinaison de lettres majuscules et minuscules.

Valeur de retour

Index de l’élément sélectionné si la recherche a réussi. Si la recherche a échoué, la valeur de retour est LB_ERR et la sélection actuelle n’est pas modifiée.

Notes

La zone de liste est défiler, si nécessaire, pour afficher l’élément sélectionné.

Cette fonction membre ne peut pas être utilisée avec une zone de liste qui a le LBS_MULTIPLESEL style.

Un élément est sélectionné uniquement si ses caractères initiaux (à partir du point de départ) correspondent aux caractères de la chaîne spécifiée par lpszItem.

Utilisez la FindString fonction membre pour rechercher une chaîne sans sélectionner l’élément.

Exemple

// The string to match.
LPCTSTR lpszmyString = _T("item 5");

// Select the item that begins with the specified string.
int nIndex = m_myListBox.SelectString(0, lpszmyString);
ASSERT(nIndex != LB_ERR);

CListBox::SelItemRange

Sélectionne plusieurs éléments consécutifs dans une zone de liste à sélection multiple.

int SelItemRange(
    BOOL bSelect,
    int nFirstItem,
    int nLastItem);

Paramètres

bSelect
Spécifie comment définir la sélection. Si bSelect c’est TRUEle cas, la chaîne est sélectionnée et mise en surbrillance ; si FALSE, la mise en surbrillance est supprimée et la chaîne n’est plus sélectionnée.

nFirstItem
Spécifie l’index de base zéro du premier élément à définir.

nLastItem
Spécifie l’index de base zéro du dernier élément à définir.

Valeur de retour

LB_ERR si une erreur se produit.

Notes

Utilisez cette fonction membre uniquement avec des zones de liste à sélection multiple. Si vous devez sélectionner un seul élément dans une zone de liste à sélection multiple ( autrement dit, si nFirstItem c’est égal à nLastItem ) appelez la fonction membre à la SetSel place.

Exemple

// Select half of the items.
m_myODListBox.SelItemRange(TRUE, 0, m_myODListBox.GetCount() / 2);

CListBox::SetAnchorIndex

Définit l’ancre dans une zone de liste à sélection multiple pour commencer une sélection étendue.

void SetAnchorIndex(int nIndex);

Paramètres

nIndex
Spécifie l’index de base zéro de l’élément de zone de liste qui sera l’ancre.

Notes

Dans une zone de liste à sélection multiple, l’élément d’ancrage est le premier ou le dernier élément d’un bloc d’éléments sélectionnés contigus.

Exemple

void CMyODListBox::OnLButtonDown(UINT nFlags, CPoint point)
{
   BOOL bOutside = TRUE;
   UINT uItem = ItemFromPoint(point, bOutside);

   if (!bOutside)
   {
      // Set the anchor to be the middle item.
      SetAnchorIndex(uItem);
      ASSERT((UINT)GetAnchorIndex() == uItem);
   }

   CListBox::OnLButtonDown(nFlags, point);
}

CListBox::SetCaretIndex

Définit le rectangle de focus sur l’élément à l’index spécifié dans une zone de liste à sélection multiple.

int SetCaretIndex(
    int nIndex,
    BOOL bScroll = TRUE);

Paramètres

nIndex
Spécifie l’index de base zéro de l’élément à recevoir le rectangle de focus dans la zone de liste.

bScroll
Si cette valeur est 0, l’élément fait défiler jusqu’à ce qu’il soit entièrement visible. Si cette valeur n’est pas 0, l’élément fait défiler jusqu’à ce qu’il soit au moins partiellement visible.

Valeur de retour

LB_ERR si une erreur se produit.

Notes

Si l’élément n’est pas visible, il fait défiler l’affichage.

Exemple

// Set the caret to be the middle item.
m_myListBox.SetCaretIndex(m_myListBox.GetCount() / 2);
ASSERT(m_myListBox.GetCaretIndex() == m_myListBox.GetCount() / 2);

CListBox::SetColumnWidth

Définit la largeur en pixels de toutes les colonnes d’une zone de liste multicolonne (créée avec le LBS_MULTICOLUMN style).

void SetColumnWidth(int cxWidth);

Paramètres

cxWidth
Spécifie la largeur en pixels de toutes les colonnes.

Exemple

// Find the pixel width of the largest item.
CString str;
CSize   sz;
int     dx = 0;
CDC* pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
   myListBox.GetText(i, str);
   sz = pDC->GetTextExtent(str);

   if (sz.cx > dx)
      dx = sz.cx;
}
myListBox.ReleaseDC(pDC);

// Set the column width of the first column to be one and 1/3 units
// of the largest string. 
myListBox.SetColumnWidth(dx * 4 / 3);

CListBox::SetCurSel

Sélectionne une chaîne et la fait défiler dans l’affichage, si nécessaire.

int SetCurSel(int nSelect);

Paramètres

nSelect
Spécifie l’index de base zéro de la chaîne à sélectionner. Si nSelect la valeur est -1, la zone de liste est définie pour ne pas avoir de sélection.

Valeur de retour

LB_ERR si une erreur se produit.

Notes

Lorsque la nouvelle chaîne est sélectionnée, la zone de liste supprime la mise en surbrillance de la chaîne précédemment sélectionnée.

Utilisez cette fonction membre uniquement avec des zones de liste à sélection unique.

Pour définir ou supprimer une sélection dans une zone de liste à sélection multiple, utilisez CListBox::SetSel.

Exemple

// Select the last item in the list box.
int nCount = m_myListBox.GetCount();
if (nCount > 0)
   m_myListBox.SetCurSel(nCount - 1);

CListBox::SetHorizontalExtent

Définit la largeur, en pixels, par laquelle une zone de liste peut faire défiler horizontalement.

void SetHorizontalExtent(int cxExtent);

Paramètres

cxExtent
Spécifie le nombre de pixels par lesquels la zone de liste peut faire défiler horizontalement.

Notes

Si la taille de la zone de liste est inférieure à cette valeur, la barre de défilement horizontale fait défiler horizontalement les éléments dans la zone de liste. Si la zone de liste est aussi grande ou supérieure à cette valeur, la barre de défilement horizontale est masquée.

Pour répondre à un appel, SetHorizontalExtentla zone de liste doit avoir été définie avec le WS_HSCROLL style.

Cette fonction membre n’est pas utile pour les zones de liste multicolumn. Pour les zones de liste multicolonnes, appelez la SetColumnWidth fonction membre.

Exemple

// Find the longest string in the list box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_myListBox.GetDC();
CFont *pFont = m_myListBox.GetFont();

// Select the listbox font, save the old font
CFont *pOldFont = pDC->SelectObject(pFont);
// Get the text metrics for avg char width
pDC->GetTextMetrics(&tm);

for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.GetText(i, str);
   sz = pDC->GetTextExtent(str);

   // Add the avg width to prevent clipping
   sz.cx += tm.tmAveCharWidth;

   if (sz.cx > dx)
      dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
m_myListBox.ReleaseDC(pDC);

// Set the horizontal extent so every character of all strings
// can be scrolled to.
m_myListBox.SetHorizontalExtent(dx);

CListBox::SetItemData

Définit une valeur associée à l’élément spécifié dans une zone de liste.

int SetItemData(
    int nIndex,
    DWORD_PTR dwItemData);

Paramètres

nIndex
Spécifie l’index de base zéro de l’élément.

dwItemData
Spécifie la valeur à associer à l’élément.

Valeur de retour

LB_ERR si une erreur se produit.

Exemple

// Set the data of each item to be equal to its index.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.SetItemData(i, i);
}

CListBox::SetItemDataPtr

Définit la valeur 32 bits associée à l’élément spécifié dans une zone de liste comme pointeur spécifié ( void *).

int SetItemDataPtr(
    int nIndex,
    void* pData);

Paramètres

nIndex
Spécifie l’index de base zéro de l’élément.

pData
Spécifie le pointeur à associer à l’élément.

Valeur de retour

LB_ERR si une erreur se produit.

Notes

Ce pointeur reste valide pour la durée de vie de la zone de liste, même si la position relative de l’élément dans la zone de liste peut changer à mesure que les éléments sont ajoutés ou supprimés. Par conséquent, l’index de l’élément dans la zone peut changer, mais le pointeur reste fiable.

Exemple

// Set the data pointer of each item to be NULL.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
   m_myListBox.SetItemDataPtr(i, NULL);
}

CListBox::SetItemHeight

Définit la hauteur des éléments dans une zone de liste.

int SetItemHeight(
    int nIndex,
    UINT cyItemHeight);

Paramètres

nIndex
Spécifie l’index de base zéro de l’élément dans la zone de liste. Ce paramètre est utilisé uniquement si la zone de liste a le LBS_OWNERDRAWVARIABLE style ; sinon, elle doit être définie sur 0.

cyItemHeight
Spécifie la hauteur, en pixels, de l’élément.

Valeur de retour

LB_ERR si l’index ou la hauteur n’est pas valide.

Notes

Si la zone de liste a le LBS_OWNERDRAWVARIABLE style, cette fonction définit la hauteur de l’élément spécifié par nIndex. Dans le cas contraire, cette fonction définit la hauteur de tous les éléments de la zone de liste.

Exemple

// Set the height of every item to be the
// vertical size of the item's text extent.
CString str;
CSize sz;
CDC *pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
   myListBox.GetText(i, str);
   sz = pDC->GetTextExtent(str);

   myListBox.SetItemHeight(i, sz.cy);
}
myListBox.ReleaseDC(pDC);

CListBox::SetLocale

Définit l’identificateur de paramètres régionaux pour cette zone de liste.

LCID SetLocale(LCID nNewLocale);

Paramètres

nNewLocale
Nouvelle valeur d’identificateur de paramètres régionaux (LCID) à définir pour la zone de liste.

Valeur de retour

Valeur de l’identificateur de paramètres régionaux précédent (LCID) pour cette zone de liste.

Notes

Si SetLocale ce n’est pas le cas, les paramètres régionaux par défaut sont obtenus à partir du système. Les paramètres régionaux par défaut de ce système peuvent être modifiés à l’aide de l’application régionale (ou internationale) de Panneau de configuration.

Exemple

// My LCID to use.
LCID mylcid = MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MEXICAN),
                       SORT_DEFAULT);

// Force the list box to use my locale.
m_myListBox.SetLocale(mylcid);
ASSERT(m_myListBox.GetLocale() == mylcid);

CListBox::SetSel

Sélectionne une chaîne dans une zone de liste à sélection multiple.

int SetSel(
    int nIndex,
    BOOL bSelect = TRUE);

Paramètres

nIndex
Contient l’index de base zéro de la chaîne à définir. Si -1, la sélection est ajoutée ou supprimée de toutes les chaînes, en fonction de la valeur de bSelect.

bSelect
Spécifie comment définir la sélection. Si bSelect c’est TRUEle cas, la chaîne est sélectionnée et mise en surbrillance ; si FALSE, la mise en surbrillance est supprimée et la chaîne n’est plus sélectionnée. La chaîne spécifiée est sélectionnée et mise en surbrillance par défaut.

Valeur de retour

LB_ERR si une erreur se produit.

Notes

Utilisez cette fonction membre uniquement avec des zones de liste à sélection multiple.

Pour sélectionner un élément dans une zone de liste à sélection unique, utilisez CListBox::SetCurSel.

Exemple

// Select all of the items with an even index and
// deselect all others.
for (int i = 0; i < m_myODListBox.GetCount(); i++)
{
   m_myODListBox.SetSel(i, ((i % 2) == 0));
}

CListBox::SetTabStops

Définit les positions de taquet de tabulation dans une zone de liste.

void SetTabStops();
BOOL SetTabStops(const int& cxEachStop);

BOOL SetTabStops(
    int nTabStops,
    LPINT rgTabStops);

Paramètres

cxEachStop
Les taquets de tabulation sont définis à chaque cxEachStop unité de dialogue. Consultez rgTabStops la description d’une unité de dialogue.

nTabStops
Spécifie le nombre d’taquets de tabulation à avoir dans la zone de liste.

rgTabStops
Pointe vers le premier membre d’un tableau d’entiers contenant les positions de taquet de tabulation dans les unités de boîte de dialogue. Une unité de dialogue est une distance horizontale ou verticale. Une unité de dialogue horizontale est égale à un quart de l’unité de largeur de base de dialogue actuelle, et une unité de dialogue verticale est égale à un huitième de l’unité de hauteur de base de boîte de dialogue actuelle. Les unités de dialogue sont calculées en fonction de la hauteur et de la largeur de la police système actuelle. La GetDialogBaseUnits fonction Windows retourne les unités de base de boîte de dialogue actuelles en pixels. Les taquets de tabulation doivent être triés dans l’ordre croissant ; Les onglets précédents ne sont pas autorisés.

Valeur de retour

Différent de zéro si tous les onglets ont été définis ; sinon 0.

Notes

Pour définir les taquets de tabulation sur la taille par défaut de 2 unités de boîte de dialogue, appelez la version sans paramètre de cette fonction membre. Pour définir les taquets de tabulation sur une taille autre que 2, appelez la version avec l’argument cxEachStop .

Pour définir des taquets de tabulation sur un tableau de tailles, utilisez la version avec les arguments et nTabStops les rgTabStops arguments. Un taquet de tabulation est défini pour chaque valeur dans rgTabStops, jusqu’au nombre spécifié par nTabStops.

Pour répondre à un appel à la SetTabStops fonction membre, la zone de liste doit avoir été créée avec le LBS_USETABSTOPS style.

Exemple

// Find the pixel width of the largest first substring.
CString str;
CSize sz;
int nIndex, dx = 0;
CDC *pDC = myListBox.GetDC();
for (int i = 0; i < myListBox.GetCount(); i++)
{
   myListBox.GetText(i, str);

   if ((nIndex = str.Find('\t')) != -1)
      str = str.Right(nIndex);

   sz = pDC->GetTextExtent(str);

   if (sz.cx > dx)
      dx = sz.cx;
}
myListBox.ReleaseDC(pDC);

// Set tab stops at every one and 1/3 units
// of the largest string.
// NOTE: Convert pixels to dialog units.
myListBox.SetTabStops((dx * 4 / 3 * 4) / LOWORD(::GetDialogBaseUnits()));

CListBox::SetTopIndex

Garantit qu’un élément de zone de liste particulier est visible.

int SetTopIndex(int nIndex);

Paramètres

nIndex
Spécifie l’index de base zéro de l’élément de zone de liste.

Valeur de retour

Zéro si elle réussit ou LB_ERR si une erreur se produit.

Notes

Le système fait défiler la zone de liste jusqu’à ce que l’élément spécifié nIndex s’affiche en haut de la zone de liste ou que la plage de défilement maximale ait été atteinte.

Exemple

// Set the first visible item in the list box to be the middle item
m_myListBox.SetTopIndex(m_myListBox.GetCount() / 2);

CListBox::VKeyToItem

Appelé par l’infrastructure lorsque la fenêtre parente de la zone de liste reçoit un WM_VKEYTOITEM message de la zone de liste.

virtual int VKeyToItem(
    UINT nKey,
    UINT nIndex);

Paramètres

nKey
Code de clé virtuelle de la touche enfoncée par l’utilisateur. Pour obtenir la liste des codes de clé virtuelle standard, consultez Winuser.h

nIndex
Position actuelle du point d’insertion de la zone de liste.

Valeur de retour

Renvoie - 2 pour aucune autre action, - 1 pour l’action par défaut, ou un nombre non négatif pour spécifier un index d’un élément de zone de liste sur lequel effectuer l’action par défaut pour la séquence de touches.

Notes

Le WM_VKEYTOITEM message est envoyé par la zone de liste lorsqu’il reçoit un WM_KEYDOWN message, mais uniquement si la zone de liste répond aux deux éléments suivants :

Vous ne devez jamais appeler cette fonction vous-même. Remplacez cette fonction pour fournir votre propre gestion personnalisée des messages clavier.

Vous devez retourner une valeur pour indiquer à l’infrastructure quelle action votre remplacement a effectuée. Une valeur de retour de - 2 indique que l’application a géré tous les aspects de la sélection de l’élément et ne nécessite aucune action supplémentaire par la zone de liste. Avant de retourner - 2, vous pouvez définir la sélection ou déplacer le caret ou les deux. Pour définir la sélection, utilisez SetCurSel ou SetSel. Pour déplacer le caret, utilisez SetCaretIndex.

Une valeur de retour de - 1 indique que la zone de liste doit effectuer l’action par défaut en réponse à la séquence de touches. L’implémentation par défaut retourne - 1.

Une valeur de retour de 0 ou supérieure spécifie l’index d’un élément dans la zone de liste et indique que la zone de liste doit effectuer l’action par défaut pour la séquence de touches sur l’élément donné.

Exemple

// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on the down key and up one item
// on the up key. The list box control was created with the following
// code:
//   m_myODListBox.Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::VKeyToItem(UINT nKey, UINT nIndex)
{
   // On key up, move the caret up one item.
   if ((nKey == VK_UP) && (nIndex > 0))
   {
      SetCaretIndex(nIndex - 1);
   }
   // On key down, move the caret down one item.
   else if ((nKey == VK_DOWN) && (nIndex < (UINT)GetCount()))
   {
      SetCaretIndex(nIndex + 1);
   }

   // Do not perform any default processing.
   return -2;
}

Voir aussi

Exemple CTRLTEST MFC
CWnd Classe
Graphique hiérarchique
CWnd Classe
CButton Classe
CComboBox Classe
CEdit Classe
CScrollBar Classe
CStatic Classe