Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Biedt de functionaliteit van een Windows-keuzelijst.
Syntaxis
class CListBox : public CWnd
Members
Openbare constructors
| Naam | Description |
|---|---|
CListBox::CListBox |
Maakt een CListBox object. |
Openbare methoden
| Naam | Description |
|---|---|
CListBox::AddString |
Hiermee voegt u een tekenreeks toe aan een keuzelijst. |
CListBox::CharToItem |
Overschrijven om aangepaste WM_CHAR verwerking te bieden voor keuzelijsten met eigenaartekeningen die geen tekenreeksen hebben. |
CListBox::CompareItem |
Aangeroepen door het framework om de positie van een nieuw item in een gesorteerde keuzelijst met eigenaartekening te bepalen. |
CListBox::Create |
Hiermee maakt u de Windows-keuzelijst en koppelt u deze aan het CListBox object. |
CListBox::DeleteItem |
Aangeroepen door het framework wanneer de gebruiker een item verwijdert uit een keuzelijst met eigenaartekeningen. |
CListBox::DeleteString |
Hiermee verwijdert u een tekenreeks uit een keuzelijst. |
CListBox::Dir |
Voegt bestandsnamen, stations of beide uit de huidige map toe aan een keuzelijst. |
CListBox::DrawItem |
Aangeroepen door het framework wanneer een visueel aspect van een keuzelijst met eigenaartekening wordt gewijzigd. |
CListBox::FindString |
Zoekt naar een tekenreeks in een keuzelijst. |
CListBox::FindStringExact |
Hiermee zoekt u de eerste keuzelijsttekenreeks die overeenkomt met een opgegeven tekenreeks. |
CListBox::GetAnchorIndex |
Haalt de op nul gebaseerde index van het huidige ankeritem op in een keuzelijst. |
CListBox::GetCaretIndex |
Bepaalt de index van het item met de focusrechthoek in een keuzelijst met meerdere keuzemogelijkheden. |
CListBox::GetCount |
Retourneert het aantal tekenreeksen in een keuzelijst. |
CListBox::GetCurSel |
Retourneert de op nul gebaseerde index van de geselecteerde tekenreeks in een keuzelijst. |
CListBox::GetHorizontalExtent |
Retourneert de breedte in pixels dat een keuzelijst horizontaal kan worden geschoven. |
CListBox::GetItemData |
Retourneert een waarde die is gekoppeld aan het keuzelijstitem. |
CListBox::GetItemDataPtr |
Retourneert een aanwijzer naar een keuzelijstitem. |
CListBox::GetItemHeight |
Bepaalt de hoogte van items in een keuzelijst. |
CListBox::GetItemRect |
Retourneert de begrenzingsrechthoek van het keuzelijstitem zoals het momenteel wordt weergegeven. |
CListBox::GetListBoxInfo |
Hiermee wordt het aantal items per kolom opgehaald. |
CListBox::GetLocale |
Hiermee haalt u de landinstellingen-id voor een keuzelijst op. |
CListBox::GetSel |
Retourneert de selectiestatus van een keuzelijstitem. |
CListBox::GetSelCount |
Retourneert het aantal tekenreeksen dat momenteel is geselecteerd in een keuzelijst met meerdere keuzemogelijkheden. |
CListBox::GetSelItems |
Retourneert de indexen van de tekenreeksen die momenteel zijn geselecteerd in een keuzelijst. |
CListBox::GetText |
Kopieert een keuzelijstitem naar een buffer. |
CListBox::GetTextLen |
Retourneert de lengte in bytes van een keuzelijstitem. |
CListBox::GetTopIndex |
Retourneert de index van de eerste zichtbare tekenreeks in een keuzelijst. |
CListBox::InitStorage |
Hiermee worden blokken geheugen voor keuzelijstitems en tekenreeksen vooraf toegewezen. |
CListBox::InsertString |
Hiermee voegt u een tekenreeks in op een specifieke locatie in een keuzelijst. |
CListBox::ItemFromPoint |
Retourneert de index van het keuzelijstitem bij het dichtstbijzijnde punt. |
CListBox::MeasureItem |
Aangeroepen door het framework wanneer een keuzelijst met eigenaartekening wordt gemaakt om de afmetingen van de keuzelijst te bepalen. |
CListBox::ResetContent |
Hiermee worden alle items uit een keuzelijst gewist. |
CListBox::SelectString |
Hiermee zoekt en selecteert u een tekenreeks in een keuzelijst met één keuzelijst. |
CListBox::SelItemRange |
Hiermee selecteert of deselecteert u een reeks tekenreeksen in een keuzelijst met meerdere keuzemogelijkheden. |
CListBox::SetAnchorIndex |
Hiermee stelt u het anker in een keuzelijst met meerdere keuzemogelijkheden in om een uitgebreide selectie te starten. |
CListBox::SetCaretIndex |
Hiermee stelt u de focusrechthoek in op het item op de opgegeven index in een keuzelijst met meerdere keuzemogelijkheden. |
CListBox::SetColumnWidth |
Hiermee stelt u de kolombreedte van een keuzelijst met meerdere kolommen in. |
CListBox::SetCurSel |
Hiermee selecteert u een keuzelijsttekenreeks. |
CListBox::SetHorizontalExtent |
Hiermee stelt u de breedte in pixels in die een keuzelijst horizontaal kan worden geschoven. |
CListBox::SetItemData |
Hiermee stelt u een waarde in die is gekoppeld aan het keuzelijstitem. |
CListBox::SetItemDataPtr |
Hiermee stelt u een aanwijzer in op het keuzelijstitem. |
CListBox::SetItemHeight |
Hiermee stelt u de hoogte van items in een keuzelijst in. |
CListBox::SetLocale |
Hiermee stelt u de landinstellingen-id voor een keuzelijst in. |
CListBox::SetSel |
Hiermee selecteert of deselecteert u een keuzelijstitem in een keuzelijst met meerdere keuzemogelijkheden. |
CListBox::SetTabStops |
Hiermee stelt u de tabstopposities in een keuzelijst in. |
CListBox::SetTopIndex |
Hiermee stelt u de op nul gebaseerde index van de eerste zichtbare tekenreeks in een keuzelijst in. |
CListBox::VKeyToItem |
Overschrijven om aangepaste WM_KEYDOWN verwerking voor keuzelijsten met de LBS_WANTKEYBOARDINPUT stijlset te bieden. |
Opmerkingen
In een keuzelijst wordt een lijst met items weergegeven, zoals bestandsnamen, die de gebruiker kan bekijken en selecteren.
In een keuzelijst met één keuzelijst kan de gebruiker slechts één item selecteren. In een keuzelijst met meerdere keuzemogelijkheden kunt u een reeks items selecteren. Wanneer de gebruiker een item selecteert, wordt dit gemarkeerd en verzendt de keuzelijst een meldingsbericht naar het bovenliggende venster.
U kunt een keuzelijst maken op basis van een dialoogvenstersjabloon of rechtstreeks in uw code. Als u het object rechtstreeks wilt maken, maakt u het CListBox object en roept u vervolgens de Create lidfunctie aan om het Besturingselement keuzelijst van Windows te maken en deze aan het CListBox object te koppelen. Als u een keuzelijst in een dialoogvenstersjabloon wilt gebruiken, declareert u een keuzelijstvariabele in de dialoogvensterklasse en gebruikt DDX_Control u vervolgens de functie van DoDataExchange de dialoogvensterklasse om de lidvariabele te verbinden met het besturingselement. (Dit wordt automatisch gedaan wanneer u een besturingselementvariabele toevoegt aan de dialoogvensterklasse.)
Constructie kan een proces in één stap zijn in een klasse die is afgeleid van CListBox. Schrijf een constructor voor de afgeleide klasse en roep Create aan vanuit de constructor.
Als u Windows-meldingsberichten wilt verwerken die door een keuzelijst naar het bovenliggende vak worden verzonden (meestal een klasse die is afgeleid van CDialog), voegt u voor elk bericht een berichttoewijzingsvermelding en een berichtenhandlerlidfunctie toe aan de bovenliggende klasse.
Elke berichtkaartvermelding heeft het volgende formulier:
ON_Notification( id, memberFxn )
waarbij id de id van het onderliggende venster van het keuzelijstbesturingselement waarmee de melding wordt verzonden en memberFxn de naam is van de bovenliggende lidfunctie die u hebt geschreven om de melding te verwerken.
Het prototype van de functie van de bovenliggende functie is als volgt:
afx_msg void memberFxn( );
Hieronder volgt een lijst met mogelijke berichtenoverzichtvermeldingen en een beschrijving van de gevallen waarin ze naar het bovenliggende item worden verzonden:
ON_LBN_DBLCLKDe gebruiker dubbelklikt op een tekenreeks in een keuzelijst. Alleen een keuzelijst met deLBS_NOTIFYstijl verzendt dit meldingsbericht.ON_LBN_ERRSPACEDe keuzelijst kan onvoldoende geheugen toewijzen om aan de aanvraag te voldoen.ON_LBN_KILLFOCUSDe invoerfocus gaat verloren in de keuzelijst.ON_LBN_SELCANCELDe huidige keuzelijst is geannuleerd. Dit bericht wordt alleen verzonden wanneer een keuzelijst deLBS_NOTIFYstijl heeft.ON_LBN_SELCHANGEDe selectie in de keuzelijst is gewijzigd. Deze melding wordt niet verzonden als de selectie wordt gewijzigd door deCListBox::SetCurSellidfunctie. Deze melding is alleen van toepassing op een keuzelijst met deLBS_NOTIFYstijl. HetLBN_SELCHANGEmeldingsbericht wordt verzonden voor een keuzelijst met meerdere keuzemogelijkheden wanneer de gebruiker op een pijltoets drukt, zelfs als de selectie niet verandert.ON_LBN_SETFOCUSDe invoerfocus wordt ontvangen in de keuzelijst.ON_WM_CHARTOITEMEen keuzelijst met eigenaartekeningen zonder tekenreeksen ontvangt eenWM_CHARbericht.ON_WM_VKEYTOITEMEen keuzelijst met deLBS_WANTKEYBOARDINPUTstijl ontvangt eenWM_KEYDOWNbericht.
Als u een CListBox object in een dialoogvenster maakt (via een dialoogvensterresource), wordt het CListBox object automatisch vernietigd wanneer de gebruiker het dialoogvenster sluit.
Als u een CListBox object in een venster maakt, moet u het CListBox object mogelijk vernietigen. Als u het CListBox object op de stapel maakt, wordt het automatisch vernietigd. Als u het CListBox object op de heap maakt met behulp van de new functie, moet u het object aanroepen delete om het te vernietigen wanneer de gebruiker het bovenliggende venster sluit.
Als u geheugen in het CListBox object toewijst, overschrijft u destructor CListBox om de toewijzing te verwijderen.
Overnamehiërarchie
CListBox
Requirements
Rubriek:afxwin.h
CListBox::AddString
Hiermee voegt u een tekenreeks toe aan een keuzelijst.
int AddString(LPCTSTR lpszItem);
Parameterwaarden
lpszItem
Verwijst naar de door null beëindigde tekenreeks die moet worden toegevoegd.
Retourwaarde
De op nul gebaseerde index voor de tekenreeks in de keuzelijst. De retourwaarde is LB_ERR als er een fout optreedt. De retourwaarde is LB_ERRSPACE als er onvoldoende ruimte beschikbaar is om de nieuwe tekenreeks op te slaan.
Opmerkingen
Als de keuzelijst niet is gemaakt met de LBS_SORT stijl, wordt de tekenreeks toegevoegd aan het einde van de lijst. Anders wordt de tekenreeks ingevoegd in de lijst en wordt de lijst gesorteerd. Als de keuzelijst is gemaakt met de LBS_SORT stijl maar niet met de LBS_HASSTRINGS stijl, sorteert het framework de lijst op een of meer aanroepen naar de CompareItem lidfunctie.
Hiermee InsertString voegt u een tekenreeks in op een specifieke locatie in de keuzelijst.
Example
// 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
Aangeroepen door het framework wanneer het bovenliggende venster van de keuzelijst een WM_CHARTOITEM bericht van de keuzelijst ontvangt.
virtual int CharToItem(
UINT nKey,
UINT nIndex);
Parameterwaarden
nKey
De ANSI-code van het teken dat de gebruiker heeft getypt.
nIndex
De huidige positie van de keuzelijstbezorger.
Retourwaarde
Retourneert - 1 of - 2 voor geen verdere actie of een niet-negatief getal om een index van een keuzelijstitem op te geven waarop de standaardactie voor de toetsaanslag moet worden uitgevoerd. De standaard implementatie retourneert - 1.
Opmerkingen
Het WM_CHARTOITEM bericht wordt verzonden door de keuzelijst wanneer het een WM_CHAR bericht ontvangt, maar alleen als de keuzelijst aan al deze criteria voldoet:
Is een keuzelijst met eigenaartekening.
De stijl is niet
LBS_HASSTRINGSingesteld.Heeft ten minste één item.
U moet deze functie nooit zelf aanroepen. Overschrijf deze functie om uw eigen aangepaste verwerking van toetsenbordberichten te bieden.
In uw onderdrukking moet u een waarde retourneren om het framework te vertellen welke actie u hebt uitgevoerd. Een retourwaarde van - 1 of - 2 geeft aan dat u alle aspecten van het selecteren van het item hebt verwerkt en geen verdere actie door de keuzelijst vereist. Voordat u terugkeert - 1 of - 2, kunt u de selectie instellen of de caret of beide verplaatsen. Als u de selectie wilt instellen, gebruikt SetCurSel u of SetSel. Als u de caret wilt verplaatsen, gebruikt u SetCaretIndex.
Een retourwaarde van 0 of hoger geeft de index van een item in de keuzelijst aan en geeft aan dat de keuzelijst de standaardactie moet uitvoeren voor de toetsaanslag op het opgegeven item.
Example
// 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
Maakt een CListBox object.
CListBox();
Opmerkingen
U maakt een CListBox object in twee stappen. Roep eerst de constructor ClistBox aan en roep Createvervolgens aan, waarmee de Windows-keuzelijst wordt geïnitialiseerd en gekoppeld aan de CListBox.
Example
// Declare a local CListBox object.
CListBox myListBox;
// Declare a dynamic CListBox object.
CListBox *pmyListBox = new CListBox;
CListBox::CompareItem
Aangeroepen door het framework om de relatieve positie van een nieuw item in een gesorteerde keuzelijst met eigenaartekening te bepalen.
virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
Parameterwaarden
lpCompareItemStruct
Een lange aanwijzer naar een COMPAREITEMSTRUCT structuur.
Retourwaarde
Geeft de relatieve positie aan van de twee items die in de COMPAREITEMSTRUCT structuur worden beschreven. Dit kunnen een van de volgende waarden zijn:
| Waarde | Meaning |
|---|---|
| -1 | Item 1 sorteert voor item 2. |
| 0 | Item 1 en item 2 sorteren hetzelfde. |
| 1 | Item 1 sorteert na item 2. |
Zie CWnd::OnCompareItem voor een beschrijving van de COMPAREITEMSTRUCT structuur.
Opmerkingen
Deze lidfunctie doet standaard niets. Als u een keuzelijst met eigenaartekening met de LBS_SORT stijl maakt, moet u deze lidfunctie overschrijven om het framework te helpen bij het sorteren van nieuwe items die aan de keuzelijst zijn toegevoegd.
Example
// 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
Hiermee maakt u de Windows-keuzelijst en koppelt u deze aan het CListBox object.
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
Parameterwaarden
dwStyle
Hiermee geeft u de stijl van de keuzelijst. Pas een combinatie van keuzelijststijlen toe op het vak.
rect
Hiermee geeft u de grootte en positie van de keuzelijst op. Dit kan een CRect object of een RECT structuur zijn.
pParentWnd
Hiermee geeft u het bovenliggende venster van de keuzelijst (meestal een CDialog object). Het mag niet zijn NULL.
nID
Hiermee geeft u de besturingselement-id van de keuzelijst op.
Retourwaarde
Niet-nul indien geslaagd; anders 0.
Opmerkingen
U maakt een CListBox object in twee stappen. Roep eerst de constructor aan en roep Createvervolgens aan, waarmee de Windows-keuzelijst wordt geïnitialiseerd en aan het CListBox object wordt gekoppeld.
Wanneer Create dit wordt uitgevoerd, verzendt Windows het WM_NCCREATEbesturingselement , WM_CREATEen WM_NCCALCSIZEWM_GETMINMAXINFO berichten naar het keuzelijstbesturingselement.
Deze berichten worden standaard verwerkt door de OnNcCreatefuncties , OnCreateen OnNcCalcSizeOnGetMinMaxInfo leden in de CWnd basisklasse. Als u de standaardverwerking van berichten wilt uitbreiden, moet u een klasse afleiden van CListBox, een berichttoewijzing toevoegen aan de nieuwe klasse en de voorgaande berichtenhandlerlidfuncties overschrijven. Overschrijven OnCreate, bijvoorbeeld om de benodigde initialisatie voor een nieuwe klasse uit te voeren.
Pas de volgende vensterstijlen toe op een keuzelijstbesturingselement.
WS_CHILDAltijdWS_VISIBLEGewoonlijkWS_DISABLEDZeldenWS_VSCROLLEen verticale schuifbalk toevoegenWS_HSCROLLEen horizontale schuifbalk toevoegenWS_GROUPBesturingselementen groeperenWS_TABSTOPTabbing naar dit besturingselement toestaan
Example
// 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
Aangeroepen door het framework wanneer de gebruiker een item verwijdert uit een eigenaar-tekenobject CListBox of de keuzelijst vernietigt.
virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
Parameterwaarden
lpDeleteItemStruct
Een lange aanwijzer naar een Windows-structuur DELETEITEMSTRUCT die informatie over het verwijderde item bevat.
Opmerkingen
De standaard implementatie van deze functie doet niets. Overschrijf deze functie om indien nodig een keuzelijst met eigenaartekening opnieuw te tekenen.
Zie CWnd::OnDeleteItem voor een beschrijving van de DELETEITEMSTRUCT structuur.
Example
// 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
Hiermee verwijdert u het item in positie nIndex uit de keuzelijst.
int DeleteString(UINT nIndex);
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index van de tekenreeks die moet worden verwijderd.
Retourwaarde
Een telling van de tekenreeksen die in de lijst blijven. De retourwaarde is als nIndex een index groter is LB_ERR dan het aantal items in de lijst.
Opmerkingen
Alle items die volgen nIndex , gaan nu één positie omlaag. Als een keuzelijst bijvoorbeeld twee items bevat, zorgt het verwijderen van het eerste item ervoor dat het resterende item nu op de eerste positie staat.
nIndex=0 voor het item op de eerste positie.
Example
// Delete every other item from the list box.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.DeleteString(i);
}
CListBox::Dir
Hiermee voegt u een lijst met bestandsnamen, stations of beide toe aan een keuzelijst.
int Dir(
UINT attr,
LPCTSTR lpszWildCard);
Parameterwaarden
attr
Dit kan een combinatie zijn van de enum waarden die worden beschreven in CFile::GetStatus, of een combinatie van de volgende waarden:
| Waarde | Meaning |
|---|---|
| 0x0000 | Bestand kan worden gelezen van of naar geschreven. |
| 0x0001 | Bestand kan worden gelezen van maar niet naar geschreven. |
| 0x0002 | Het bestand is verborgen en wordt niet weergegeven in een lijst met mappen. |
| 0x0004 | Bestand is een systeembestand. |
| 0x0010 | De naam die is opgegeven door lpszWildCard een map. |
| 0x0020 | Het bestand is gearchiveerd. |
| 0x4000 | Neem alle stations op die overeenkomen met de naam die is opgegeven door lpszWildCard. |
| 0x8000 | Exclusieve vlag. Als de exclusieve vlag is ingesteld, worden alleen bestanden van het opgegeven type weergegeven. Anders worden bestanden van het opgegeven type weergegeven naast 'normale' bestanden. |
lpszWildCard
Verwijst naar een tekenreeks voor bestandsspecificatie. De tekenreeks kan jokertekens bevatten (bijvoorbeeld *.*).
Retourwaarde
De op nul gebaseerde index van de laatste bestandsnaam die aan de lijst is toegevoegd. De retourwaarde is LB_ERR als er een fout optreedt. De retourwaarde is LB_ERRSPACE als er onvoldoende ruimte beschikbaar is om de nieuwe tekenreeksen op te slaan.
Example
// 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
Aangeroepen door het framework wanneer een visueel aspect van een keuzelijst met eigenaartekening wordt gewijzigd.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Parameterwaarden
lpDrawItemStruct
Een lange aanwijzer naar een DRAWITEMSTRUCT structuur die informatie bevat over het type tekening dat nodig is.
Opmerkingen
De itemAction en itemState leden van de DRAWITEMSTRUCT structuur definiëren de tekenactie die moet worden uitgevoerd.
Deze lidfunctie doet standaard niets. Overschrijf deze lidfunctie om tekening te implementeren voor een eigenaar-tekenobject CListBox . De toepassing moet alle GDI-objecten (Graphics Device Interface) herstellen die zijn geselecteerd voor de weergavecontext die is opgegeven lpDrawItemStruct voordat deze lidfunctie wordt beëindigd.
Zie CWnd::OnDrawItem voor een beschrijving van de DRAWITEMSTRUCT structuur.
Example
// 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
Hiermee zoekt u de eerste tekenreeks in een keuzelijst die het opgegeven voorvoegsel bevat zonder de keuzelijst te wijzigen.
int FindString(
int nStartAfter,
LPCTSTR lpszItem) const;
Parameterwaarden
nStartAfter
Bevat de op nul gebaseerde index van het item voordat het eerste item moet worden doorzocht. Wanneer de zoekopdracht de onderkant van de keuzelijst bereikt, gaat deze van boven aan de keuzelijst terug naar het item dat is opgegeven door nStartAfter. Als nStartAfter -1 is, wordt in de hele keuzelijst vanaf het begin gezocht.
lpszItem
Verwijst naar de door null beëindigde tekenreeks die het voorvoegsel bevat waarnaar moet worden gezocht. De zoekopdracht is onafhankelijk van hoofdletters, dus deze tekenreeks kan elke combinatie van hoofdletters en kleine letters bevatten.
Retourwaarde
De op nul gebaseerde index van het overeenkomende item of LB_ERR als de zoekopdracht is mislukt.
Opmerkingen
Gebruik de SelectString lidfunctie om een tekenreeks te zoeken en te selecteren.
Example
// 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
Hiermee zoekt u de eerste keuzelijsttekenreeks die overeenkomt met de tekenreeks die is opgegeven in lpszFind.
int FindStringExact(
int nIndexStart,
LPCTSTR lpszFind) const;
Parameterwaarden
nIndexStart
Hiermee geeft u de op nul gebaseerde index van het item op voordat het eerste item moet worden doorzocht. Wanneer de zoekopdracht de onderkant van de keuzelijst bereikt, gaat deze van boven aan de keuzelijst terug naar het item dat is opgegeven door nIndexStart. Als nIndexStart -1 is, wordt in de hele keuzelijst vanaf het begin gezocht.
lpszFind
Verwijst naar de tekenreeks die door null is beëindigd om naar te zoeken. Deze tekenreeks kan een volledige bestandsnaam bevatten, inclusief de extensie. De zoekopdracht is niet hoofdlettergevoelig, dus de tekenreeks kan elke combinatie van hoofdletters en kleine letters bevatten.
Retourwaarde
De index van het overeenkomende item of LB_ERR als de zoekopdracht is mislukt.
Opmerkingen
Als de keuzelijst is gemaakt met een tekenstijl van een eigenaar, maar zonder de LBS_HASSTRINGS stijl, probeert de FindStringExact lidfunctie de waarde van het dubbele woord te vergelijken met de waarde van lpszFind.
Example
// 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
Haalt de op nul gebaseerde index van het huidige ankeritem op in de keuzelijst.
int GetAnchorIndex() const;
Retourwaarde
De index van het huidige ankeritem, indien geslaagd; anders LB_ERR.
Opmerkingen
In een keuzelijst met meerdere keuzemogelijkheden is het ankeritem het eerste of laatste item in een blok met aaneengesloten geselecteerde items.
Example
Zie het voorbeeld voor CListBox::SetAnchorIndex.
CListBox::GetCaretIndex
Bepaalt de index van het item met de focusrechthoek in een keuzelijst met meerdere keuzemogelijkheden.
int GetCaretIndex() const;
Retourwaarde
De op nul gebaseerde index van het item met de focusrechthoek in een keuzelijst. Als de keuzelijst een keuzelijst met één keuzelijst is, is de retourwaarde de index van het geselecteerde item, indien van toepassing.
Opmerkingen
Het item kan al dan niet worden geselecteerd.
Example
Zie het voorbeeld voor CListBox::SetCaretIndex.
CListBox::GetCount
Hiermee wordt het aantal items in een keuzelijst opgehaald.
int GetCount() const;
Retourwaarde
Het aantal items in de keuzelijst of LB_ERR als er een fout optreedt.
Opmerkingen
Het geretourneerde aantal is één groter dan de indexwaarde van het laatste item (de index is gebaseerd op nul).
Example
// 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
Hiermee wordt de op nul gebaseerde index van het geselecteerde item opgehaald, indien van toepassing, in een keuzelijst met één keuzelijst.
int GetCurSel() const;
Retourwaarde
De op nul gebaseerde index van het geselecteerde item als het een keuzelijst met één selectie is. Dit is LB_ERR als er momenteel geen item is geselecteerd.
In een keuzelijst met meerdere keuzemogelijkheden is de index van het item met de focus.
Opmerkingen
Geen keuzelijst met meerdere keuzemogelijkheden aanroepen GetCurSel . Gebruik in plaats daarvan CListBox::GetSelItems.
Example
// 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
Hiermee haalt u de breedte in pixels op uit de keuzelijst waarmee deze horizontaal kan worden geschoven.
int GetHorizontalExtent() const;
Retourwaarde
De schuifbare breedte van de keuzelijst, in pixels.
Opmerkingen
Dit is alleen van toepassing als de keuzelijst een horizontale schuifbalk heeft.
Example
// 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
Hiermee haalt u de door de toepassing geleverde dubbele woordwaarde op die is gekoppeld aan het opgegeven keuzelijstitem.
DWORD_PTR GetItemData(int nIndex) const;
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index van het item in de keuzelijst op.
Retourwaarde
De waarde die is gekoppeld aan het item of LB_ERR als er een fout optreedt.
Opmerkingen
De waarde van het dubbele woord was de dwItemData parameter van een SetItemData aanroep.
Example
// 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
Haalt de 32-bits opgegeven 32-bits waarde op die is gekoppeld aan het opgegeven keuzelijstitem als een aanwijzer (void*).
void* GetItemDataPtr(int nIndex) const;
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index van het item in de keuzelijst op.
Retourwaarde
Hiermee haalt u een aanwijzer of -1 op als er een fout optreedt.
Example
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
Bepaalt de hoogte van items in een keuzelijst.
int GetItemHeight(int nIndex) const;
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index van het item in de keuzelijst op. Deze parameter wordt alleen gebruikt als de keuzelijst de LBS_OWNERDRAWVARIABLE stijl heeft. Anders moet deze worden ingesteld op 0.
Retourwaarde
De hoogte, in pixels, van de items in de keuzelijst. Als de keuzelijst de LBS_OWNERDRAWVARIABLE stijl heeft, is de retourwaarde de hoogte van het item dat is opgegeven door nIndex. Als er een fout optreedt, is LB_ERRde retourwaarde .
Example
// 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
Hiermee haalt u de afmetingen op van de rechthoek die een keuzelijstitem begrenst, omdat dit momenteel wordt weergegeven in het keuzelijstvenster.
int GetItemRect(
int nIndex,
LPRECT lpRect) const;
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index van het item op.
lpRect
Hiermee geeft u een lange aanwijzer naar een RECT structuur die de coördinaten van de keuzelijstclient van het item ontvangt.
Retourwaarde
LB_ERR als er een fout optreedt.
Example
// 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
Hiermee wordt het aantal items per kolom opgehaald.
DWORD GetListBoxInfo() const;
Retourwaarde
Aantal items per kolom van het CListBox object.
Opmerkingen
Met deze lidfunctie wordt de functionaliteit van het LB_GETLISTBOXINFO bericht geëmuleren, zoals beschreven in de Windows SDK.
CListBox::GetLocale
Hiermee wordt de landinstelling opgehaald die wordt gebruikt door de keuzelijst.
LCID GetLocale() const;
Retourwaarde
De LCID-waarde (Locale Identifier) voor de tekenreeksen in de keuzelijst.
Opmerkingen
De landinstelling wordt bijvoorbeeld gebruikt om de sorteervolgorde van de tekenreeksen in een gesorteerde keuzelijst te bepalen.
Example
Zie het voorbeeld voor CListBox::SetLocale.
CListBox::GetSel
Hiermee haalt u de selectiestatus van een item op.
int GetSel(int nIndex) const;
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index van het item op.
Retourwaarde
Een positief getal als het opgegeven item is geselecteerd; anders is het 0. De retourwaarde is LB_ERR als er een fout optreedt.
Opmerkingen
Deze lidfunctie werkt met keuzelijsten met één of meerdere keuzemogelijkheden.
Als u de index van het geselecteerde keuzelijstitem wilt ophalen, gebruikt CListBox::GetCurSelu .
Example
// 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
Hiermee wordt het totale aantal geselecteerde items in een keuzelijst met meerdere keuzemogelijkheden opgehaald.
int GetSelCount() const;
Retourwaarde
Het aantal geselecteerde items in een keuzelijst. Als de keuzelijst een keuzelijst met één keuzelijst is, is LB_ERRde retourwaarde .
Example
Zie het voorbeeld voor CListBox::GetSelItems.
CListBox::GetSelItems
Hiermee wordt een buffer gevuld met een matrix met gehele getallen waarmee de itemnummers van geselecteerde items in een keuzelijst met meerdere selecties worden opgegeven.
int GetSelItems(
int nMaxItems,
LPINT rgIndex) const;
Parameterwaarden
nMaxItems
Hiermee geeft u het maximum aantal geselecteerde items waarvan de itemnummers in de buffer moeten worden geplaatst.
rgIndex
Hiermee geeft u een aanwijzer naar een buffer groot genoeg voor het aantal gehele getallen dat is opgegeven door nMaxItems.
Retourwaarde
Het werkelijke aantal items dat in de buffer is geplaatst. Als de keuzelijst een keuzelijst met één keuzelijst is, is LB_ERRde retourwaarde .
Example
// 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
Hiermee haalt u een tekenreeks op uit een keuzelijst.
int GetText(
int nIndex,
LPTSTR lpszBuffer) const;
void GetText(
int nIndex,
CString& rString) const;
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index van de tekenreeks die moet worden opgehaald.
lpszBuffer
Verwijst naar de buffer die de tekenreeks ontvangt. De buffer moet voldoende ruimte hebben voor de tekenreeks en een afsluit null-teken. De grootte van de tekenreeks kan vooraf worden bepaald door de GetTextLen lidfunctie aan te roepen.
rString
Een verwijzing naar een CString object.
Retourwaarde
De lengte (in bytes) van de tekenreeks, met uitzondering van het afsluitende null-teken. Als nIndex er geen geldige index wordt opgegeven, is LB_ERRde retourwaarde .
Opmerkingen
De tweede vorm van deze lidfunctie vult een CString object met de tekenreekstekst.
Example
// 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
Hiermee haalt u de lengte van een tekenreeks in een keuzelijstitem op.
int GetTextLen(int nIndex) const;
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index van de tekenreeks.
Retourwaarde
De lengte van de tekenreeks in tekens, met uitzondering van het afsluitende null-teken. Als nIndex er geen geldige index wordt opgegeven, is LB_ERRde retourwaarde .
Example
Zie het voorbeeld voor CListBox::GetText.
CListBox::GetTopIndex
Haalt de op nul gebaseerde index van het eerste zichtbare item in een keuzelijst op.
int GetTopIndex() const;
Retourwaarde
De op nul gebaseerde index van het eerste zichtbare item in een keuzelijst, LB_ERR anders.
Opmerkingen
In eerste instantie bevindt item 0 zich boven aan de keuzelijst, maar als de keuzelijst wordt geschoven, bevindt een ander item zich mogelijk bovenaan.
Example
// 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
Hiermee wordt geheugen toegewezen voor het opslaan van keuzelijstitems.
int InitStorage(
int nItems,
UINT nBytes);
Parameterwaarden
nItems
Hiermee geeft u het aantal items op waarnaar de ruimte moet worden gereserveerd.
nBytes
Hiermee geeft u de hoeveelheid extra geheugen in bytes op die moet worden toegewezen voor itemtekenreeksen.
Retourwaarde
Als dit lukt, is het maximum aantal items dat in de keuzelijst kan worden opgeslagen voordat een herlocatie van het geheugen nodig is, anders LB_ERRSPACEbetekent dit dat er onvoldoende geheugen beschikbaar is.
Opmerkingen
U kunt deze functie aanroepen voordat u een groot aantal items toevoegt aan een CListBox.
Met deze functie kunt u de initialisatie van keuzelijsten met een groot aantal items versnellen (meer dan 100). De opgegeven hoeveelheid geheugen wordt vooraf toegewezen, zodat volgende AddString, InsertStringen Dir functies efficiënter zijn. U kunt schattingen voor de parameters gebruiken. Als u overschat, blijft het extra geheugen toegewezen; als u onderschat, wijst de keuzelijst indien nodig extra geheugen toe.
Het geheugen dat nodig is om een tekenreeks op te slaan, bevat de null-afsluiter. Als u dus van plan bent om 100 tekenreeksen toe te voegen, elk met een lengte van 10 tekens, geeft u een wParam van 100 en een lParam van 100 × (10 + 1) × grootte van (TCHAR).
Alleen Windows 95/98: de nItems parameter is beperkt tot 16-bits waarden. Dit betekent dat keuzelijsten niet meer dan 32.767 items mogen bevatten. Hoewel het aantal items beperkt is, wordt de totale grootte van de items in een keuzelijst alleen beperkt door het beschikbare geheugen.
Example
// Reserve space in the list box for 256 additional strings with
// about 15 characters per string.
int n = m_myListBox.InitStorage(256, 256 * (15 + 1) * 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
Hiermee voegt u een tekenreeks in de keuzelijst in.
int InsertString(
int nIndex,
LPCTSTR lpszItem);
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index van de positie om de tekenreeks in te voegen. Als deze parameter -1 is, wordt de tekenreeks toegevoegd aan het einde van de lijst.
lpszItem
Verwijst naar de door null beëindigde tekenreeks die moet worden ingevoegd.
Retourwaarde
De op nul gebaseerde index van de positie waarop de tekenreeks is ingevoegd. De retourwaarde is LB_ERR als er een fout optreedt. De retourwaarde is LB_ERRSPACE als er onvoldoende ruimte beschikbaar is om de nieuwe tekenreeks op te slaan.
Opmerkingen
In tegenstelling tot de AddString lidfunctie, InsertString wordt er geen lijst met de LBS_SORT stijl gesorteerd.
Example
// 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
Bepaalt het keuzelijstitem het dichtstbijzijnde punt dat is opgegeven in pt.
UINT ItemFromPoint(
CPoint pt,
BOOL& bOutside) const;
Parameterwaarden
pt
Punt waarvoor het dichtstbijzijnde item moet worden gevonden, opgegeven ten opzichte van de linkerbovenhoek van het clientgebied van de keuzelijst.
bOutside
Verwijzing naar een BOOL variabele die wordt ingesteld TRUE op of pt zich buiten het clientgebied van de keuzelijst bevindt, FALSE als pt deze zich in het clientgebied van de keuzelijst bevindt.
Retourwaarde
De index van het dichtstbijzijnde item tot het punt dat is opgegeven in pt.
Opmerkingen
U kunt deze functie gebruiken om te bepalen welk keuzelijstitem de muiscursor over beweegt.
Example
Zie het voorbeeld voor CListBox::SetAnchorIndex.
CListBox::MeasureItem
Aangeroepen door het framework wanneer een keuzelijst met een tekenstijl van eigenaar wordt gemaakt.
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
Parameterwaarden
lpMeasureItemStruct
Een lange aanwijzer naar een MEASUREITEMSTRUCT structuur.
Opmerkingen
Deze lidfunctie doet standaard niets. Overschrijf deze lidfunctie en vul de MEASUREITEMSTRUCT structuur in om Windows te informeren over de afmetingen van de keuzelijst. Als de keuzelijst met de LBS_OWNERDRAWVARIABLE stijl wordt gemaakt, roept het framework deze lidfunctie aan voor elk item in de keuzelijst. Anders wordt dit lid slechts één keer aangeroepen.
Zie de discussie in Technical Note 14 voor meer informatie over het gebruik van de LBS_OWNERDRAWFIXED stijl in een keuzelijst met eigenaartekening die is gemaakt met de SubclassDlgItem lidfunctie vanCWnd.
Zie CWnd::OnMeasureItem voor een beschrijving van de MEASUREITEMSTRUCT structuur.
Example
// 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
Hiermee verwijdert u alle items uit een keuzelijst.
void ResetContent();
Example
// Delete all the items from the list box.
m_myListBox.ResetContent();
ASSERT(m_myListBox.GetCount() == 0);
CListBox::SelectString
Zoekt naar een keuzelijstitem dat overeenkomt met de opgegeven tekenreeks en als er een overeenkomend item wordt gevonden, wordt het item geselecteerd.
int SelectString(
int nStartAfter,
LPCTSTR lpszItem);
Parameterwaarden
nStartAfter
Bevat de op nul gebaseerde index van het item voordat het eerste item moet worden doorzocht. Wanneer de zoekopdracht de onderkant van de keuzelijst bereikt, gaat deze van boven aan de keuzelijst terug naar het item dat is opgegeven door nStartAfter. Als nStartAfter -1 is, wordt in de hele keuzelijst vanaf het begin gezocht.
lpszItem
Verwijst naar de door null beëindigde tekenreeks die het voorvoegsel bevat waarnaar moet worden gezocht. De zoekopdracht is onafhankelijk van hoofdletters, dus deze tekenreeks kan elke combinatie van hoofdletters en kleine letters bevatten.
Retourwaarde
De index van het geselecteerde item als de zoekopdracht is geslaagd. Als de zoekopdracht is mislukt, is de retourwaarde en LB_ERR wordt de huidige selectie niet gewijzigd.
Opmerkingen
De keuzelijst wordt zo nodig geschoven om het geselecteerde item in beeld te brengen.
Deze lidfunctie kan niet worden gebruikt met een keuzelijst met de LBS_MULTIPLESEL stijl.
Een item wordt alleen geselecteerd als de oorspronkelijke tekens (vanaf het beginpunt) overeenkomen met de tekens in de tekenreeks die is opgegeven door lpszItem.
Gebruik de FindString lidfunctie om een tekenreeks te zoeken zonder het item te selecteren.
Example
// 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
Hiermee selecteert u meerdere opeenvolgende items in een keuzelijst met meerdere keuzemogelijkheden.
int SelItemRange(
BOOL bSelect,
int nFirstItem,
int nLastItem);
Parameterwaarden
bSelect
Hiermee geeft u op hoe u de selectie instelt. Als dat het isTRUE, wordt de tekenreeks geselecteerd en gemarkeerd. Als bSelectFALSEde markering wordt verwijderd en de tekenreeks niet meer is geselecteerd.
nFirstItem
Hiermee geeft u de op nul gebaseerde index van het eerste item dat moet worden ingesteld.
nLastItem
Hiermee geeft u de op nul gebaseerde index van het laatste item dat moet worden ingesteld.
Retourwaarde
LB_ERR als er een fout optreedt.
Opmerkingen
Gebruik deze lidfunctie alleen met keuzelijsten met meerdere keuzemogelijkheden. Als u slechts één item in een keuzelijst met meerdere keuzemogelijkheden moet selecteren , dat wil gezegd, als nFirstItem dit gelijk is aan , roept u in plaats daarvan de SetSel lidfunctie aan nLastItem .
Example
// Select half of the items.
m_myODListBox.SelItemRange(TRUE, 0, m_myODListBox.GetCount() / 2);
CListBox::SetAnchorIndex
Hiermee stelt u het anker in een keuzelijst met meerdere keuzemogelijkheden in om een uitgebreide selectie te starten.
void SetAnchorIndex(int nIndex);
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index op van het keuzelijstitem dat het anker wordt.
Opmerkingen
In een keuzelijst met meerdere keuzemogelijkheden is het ankeritem het eerste of laatste item in een blok met aaneengesloten geselecteerde items.
Example
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
Hiermee stelt u de focusrechthoek in op het item op de opgegeven index in een keuzelijst met meerdere keuzemogelijkheden.
int SetCaretIndex(
int nIndex,
BOOL bScroll = TRUE);
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index van het item op om de focusrechthoek in de keuzelijst te ontvangen.
bScroll
Als deze waarde 0 is, wordt het item geschoven totdat het volledig zichtbaar is. Als deze waarde niet 0 is, wordt het item geschoven totdat het ten minste gedeeltelijk zichtbaar is.
Retourwaarde
LB_ERR als er een fout optreedt.
Opmerkingen
Als het item niet zichtbaar is, wordt het weergegeven.
Example
// 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
Hiermee stelt u de breedte in pixels van alle kolommen in een keuzelijst met meerdere kolommen in (gemaakt met de LBS_MULTICOLUMN stijl).
void SetColumnWidth(int cxWidth);
Parameterwaarden
cxWidth
Hiermee geeft u de breedte in pixels van alle kolommen.
Example
// 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
Selecteert een tekenreeks en schuift deze naar de weergave, indien nodig.
int SetCurSel(int nSelect);
Parameterwaarden
nSelect
Hiermee geeft u de op nul gebaseerde index van de tekenreeks die moet worden geselecteerd. Als nSelect -1 is, is de keuzelijst ingesteld op geen selectie.
Retourwaarde
LB_ERR als er een fout optreedt.
Opmerkingen
Wanneer de nieuwe tekenreeks is geselecteerd, wordt in de keuzelijst de markering verwijderd uit de eerder geselecteerde tekenreeks.
Gebruik deze lidfunctie alleen met keuzelijsten met één keuzelijst.
Als u een selectie in een keuzelijst met meerdere keuzemogelijkheden wilt instellen of verwijderen, gebruikt CListBox::SetSelu .
Example
// Select the last item in the list box.
int nCount = m_myListBox.GetCount();
if (nCount > 0)
m_myListBox.SetCurSel(nCount - 1);
CListBox::SetHorizontalExtent
Hiermee stelt u de breedte in pixels in waarmee een keuzelijst horizontaal kan worden geschoven.
void SetHorizontalExtent(int cxExtent);
Parameterwaarden
cxExtent
Hiermee geeft u het aantal pixels op waarmee de keuzelijst horizontaal kan worden geschoven.
Opmerkingen
Als de grootte van de keuzelijst kleiner is dan deze waarde, schuift de horizontale schuifbalk horizontaal door items in de keuzelijst. Als de keuzelijst net zo groot of groter is dan deze waarde, is de horizontale schuifbalk verborgen.
Als u wilt reageren op een oproep SetHorizontalExtent, moet de keuzelijst zijn gedefinieerd met de WS_HSCROLL stijl.
Deze lidfunctie is niet handig voor keuzelijsten met meerdere kolommen. Voor keuzelijsten met meerdere kolommen roept u de SetColumnWidth lidfunctie aan.
Example
// 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
Hiermee stelt u een waarde in die is gekoppeld aan het opgegeven item in een keuzelijst.
int SetItemData(
int nIndex,
DWORD_PTR dwItemData);
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index van het item op.
dwItemData
Hiermee geeft u de waarde die aan het item moet worden gekoppeld.
Retourwaarde
LB_ERR als er een fout optreedt.
Example
// 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
Hiermee stelt u de 32-bits waarde in die is gekoppeld aan het opgegeven item in een keuzelijst als de opgegeven aanwijzer ( void*).
int SetItemDataPtr(
int nIndex,
void* pData);
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index van het item op.
pData
Hiermee geeft u de aanwijzer die aan het item moet worden gekoppeld.
Retourwaarde
LB_ERR als er een fout optreedt.
Opmerkingen
Deze aanwijzer blijft geldig voor de levensduur van de keuzelijst, ook al kan de relatieve positie van het item in de keuzelijst veranderen wanneer items worden toegevoegd of verwijderd. De index van het item in het vak kan daarom worden gewijzigd, maar de aanwijzer blijft betrouwbaar.
Example
// 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
Hiermee stelt u de hoogte van items in een keuzelijst in.
int SetItemHeight(
int nIndex,
UINT cyItemHeight);
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index van het item in de keuzelijst op. Deze parameter wordt alleen gebruikt als de keuzelijst de LBS_OWNERDRAWVARIABLE stijl heeft. Anders moet deze worden ingesteld op 0.
cyItemHeight
Hiermee geeft u de hoogte, in pixels, van het item.
Retourwaarde
LB_ERR als de index of hoogte ongeldig is.
Opmerkingen
Als de keuzelijst de LBS_OWNERDRAWVARIABLE stijl heeft, wordt met deze functie de hoogte van het item ingesteld dat is opgegeven door nIndex. Anders stelt deze functie de hoogte van alle items in de keuzelijst in.
Example
// 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
Hiermee stelt u de landinstellingen-id voor deze keuzelijst in.
LCID SetLocale(LCID nNewLocale);
Parameterwaarden
nNewLocale
De nieuwe LCID-waarde (locale identifier) die moet worden ingesteld voor de keuzelijst.
Retourwaarde
De vorige LCID-waarde (Locale Identifier) voor deze keuzelijst.
Opmerkingen
Als SetLocale dit niet wordt aangeroepen, wordt de standaardlandinstelling verkregen van het systeem. Deze standaardinstelling van het systeem kan worden gewijzigd met behulp van de landinstelling van het Configuratiescherm (of internationaal).
Example
// 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
Hiermee selecteert u een tekenreeks in een keuzelijst met meerdere keuzemogelijkheden.
int SetSel(
int nIndex,
BOOL bSelect = TRUE);
Parameterwaarden
nIndex
Bevat de op nul gebaseerde index van de tekenreeks die moet worden ingesteld. Als -1, wordt de selectie toegevoegd aan of verwijderd uit alle tekenreeksen, afhankelijk van de waarde van bSelect.
bSelect
Hiermee geeft u op hoe u de selectie instelt. Als dat het isTRUE, wordt de tekenreeks geselecteerd en gemarkeerd. Als bSelectFALSEde markering wordt verwijderd en de tekenreeks niet meer is geselecteerd. De opgegeven tekenreeks is geselecteerd en standaard gemarkeerd.
Retourwaarde
LB_ERR als er een fout optreedt.
Opmerkingen
Gebruik deze lidfunctie alleen met keuzelijsten met meerdere keuzemogelijkheden.
Als u een item in een keuzelijst met één keuzelijst wilt selecteren, gebruikt CListBox::SetCurSelu .
Example
// 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
Hiermee stelt u de tabstopposities in een keuzelijst in.
void SetTabStops();
BOOL SetTabStops(const int& cxEachStop);
BOOL SetTabStops(
int nTabStops,
LPINT rgTabStops);
Parameterwaarden
cxEachStop
Tabstops worden ingesteld bij alle cxEachStop dialoogvensters. Zie rgTabStops voor een beschrijving van een dialoogvenster.
nTabStops
Hiermee geeft u het aantal tabstops in de keuzelijst op.
rgTabStops
Verwijst naar het eerste lid van een matrix met gehele getallen met de tabstopposities in dialoogvensters. Een dialoogvenstereenheid is een horizontale of verticale afstand. Eén horizontale dialoogvenstereenheid is gelijk aan een vierde van de huidige eenheid voor de basisbreedte van het dialoogvenster en één verticale dialoogvenstereenheid is gelijk aan één achtste van de huidige basishoogteeenheid van het dialoogvenster. De dialoogvensterbasiseenheden worden berekend op basis van de hoogte en breedte van het huidige systeemlettertype. De GetDialogBaseUnits Windows-functie retourneert de huidige dialoogvensterbasiseenheden in pixels. De tabstops moeten in oplopende volgorde worden gesorteerd; Back-tabs zijn niet toegestaan.
Retourwaarde
Niet-nul als alle tabbladen zijn ingesteld; anders 0.
Opmerkingen
Als u tabstops wilt instellen op de standaardgrootte van 2 dialoogvensters, roept u de parameterloze versie van deze lidfunctie aan. Als u tabstops wilt instellen op een andere grootte dan 2, roept u de versie aan met het cxEachStop argument.
Als u tabstops wilt instellen op een matrix met grootten, gebruikt u de versie met de rgTabStops en nTabStops argumenten. Er wordt een tabstop ingesteld voor elke waarde in rgTabStops, tot het getal dat is opgegeven door nTabStops.
Als u wilt reageren op een aanroep van de SetTabStops lidfunctie, moet de keuzelijst zijn gemaakt met de LBS_USETABSTOPS stijl.
Example
// 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
Zorgt ervoor dat een bepaald keuzelijstitem zichtbaar is.
int SetTopIndex(int nIndex);
Parameterwaarden
nIndex
Hiermee geeft u de op nul gebaseerde index van het keuzelijstitem.
Retourwaarde
Nul als dit lukt of LB_ERR als er een fout optreedt.
Opmerkingen
Het systeem schuift de keuzelijst totdat het item dat is nIndex opgegeven boven aan de keuzelijst wordt weergegeven of het maximale schuifbereik is bereikt.
Example
// Set the first visible item in the list box to be the middle item
m_myListBox.SetTopIndex(m_myListBox.GetCount() / 2);
CListBox::VKeyToItem
Aangeroepen door het framework wanneer het bovenliggende venster van de keuzelijst een WM_VKEYTOITEM bericht van de keuzelijst ontvangt.
virtual int VKeyToItem(
UINT nKey,
UINT nIndex);
Parameterwaarden
nKey
De code van de virtuele sleutel van de sleutel die de gebruiker heeft ingedrukt. Zie voor een lijst met standaard virtuele-sleutelcodes Winuser.h
nIndex
De huidige positie van de keuzelijstbezorger.
Retourwaarde
Retourneert - 2 voor geen verdere actie, - 1 voor standaardactie of een niet-negatief getal om een index van een keuzelijstitem op te geven waarop de standaardactie voor de toetsaanslag moet worden uitgevoerd.
Opmerkingen
Het WM_VKEYTOITEM bericht wordt verzonden door de keuzelijst wanneer het een WM_KEYDOWN bericht ontvangt, maar alleen als het keuzelijstje aan beide van de volgende voldoet:
Heeft de
LBS_WANTKEYBOARDINPUTstijlset.Heeft ten minste één item.
U moet deze functie nooit zelf aanroepen. Overschrijf deze functie om uw eigen aangepaste verwerking van toetsenbordberichten te bieden.
U moet een waarde retourneren om het framework te vertellen welke actie uw onderdrukking heeft uitgevoerd. Een retourwaarde van - 2 geeft aan dat de toepassing alle aspecten van het selecteren van het item heeft verwerkt en geen verdere actie door de keuzelijst vereist. Voordat u terugkeert - 2, kunt u de selectie instellen of de caret of beide verplaatsen. Als u de selectie wilt instellen, gebruikt SetCurSel u of SetSel. Als u de caret wilt verplaatsen, gebruikt u SetCaretIndex.
Een retourwaarde van - 1 geeft aan dat de keuzelijst de standaardactie moet uitvoeren als reactie op de toetsaanslag. De standaard implementatie retourneert - 1.
Een retourwaarde van 0 of hoger geeft de index van een item in de keuzelijst aan en geeft aan dat de keuzelijst de standaardactie moet uitvoeren voor de toetsaanslag op het opgegeven item.
Example
// 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;
}
Zie ook
MFC-voorbeeld CTRLTEST
CWnd klasse
Hiërarchiediagram
CWnd klasse
CButton klasse
CComboBox klasse
CEdit klasse
CScrollBar klasse
CStatic klasse