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 )
où 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 leLBS_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 leLBS_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 laCListBox::SetCurSel
fonction membre. Cette notification s’applique uniquement à une zone de liste qui a leLBS_NOTIFY
style. LeLBN_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 unWM_CHAR
message.ON_WM_VKEYTOITEM
Une zone de liste avec leLBS_WANTKEYBOARDINPUT
style reçoit unWM_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
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_NCCREATE
messages , et WM_CREATE
WM_NCCALCSIZE
WM_GETMINMAXINFO
les messages à la zone de liste.
Ces messages sont gérés par défaut par les OnNcCreate
fonctions membres et OnNcCalcSize
OnGetMinMaxInfo
, OnCreate
par 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
ToujoursWS_VISIBLE
HabituellementWS_DISABLED
RarementWS_VSCROLL
Pour ajouter une barre de défilement verticaleWS_HSCROLL
Pour ajouter une barre de défilement horizontaleWS_GROUP
Pour regrouper les contrôlesWS_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_ERRSPACE
qui 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 AddString
InsertString
Dir
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 TRUE
le 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, SetHorizontalExtent
la 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 TRUE
le 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 :
A l’ensemble de
LBS_WANTKEYBOARDINPUT
styles.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.
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