Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Innehåller funktionerna i en Windows-listruta.
Syntax
class CListBox : public CWnd
Members
Offentliga konstruktorer
| Namn | Description |
|---|---|
CListBox::CListBox |
Konstruerar ett CListBox objekt. |
Offentliga metoder
| Namn | Description |
|---|---|
CListBox::AddString |
Lägger till en sträng i en listruta. |
CListBox::CharToItem |
Åsidosätt för att tillhandahålla anpassad WM_CHAR hantering för listrutor för ägardragning som inte har strängar. |
CListBox::CompareItem |
Anropas av ramverket för att fastställa positionen för ett nytt objekt i en sorterad listruta för ägardragning. |
CListBox::Create |
Skapar listrutan i Windows och bifogar den CListBox till objektet. |
CListBox::DeleteItem |
Anropas av ramverket när användaren tar bort ett objekt från en listruta för ägardragning. |
CListBox::DeleteString |
Tar bort en sträng från en listruta. |
CListBox::Dir |
Lägger till filnamn, enheter eller båda från den aktuella katalogen i en listruta. |
CListBox::DrawItem |
Anropas av ramverket när en visuell aspekt av en listruta för ägardragning ändras. |
CListBox::FindString |
Söker efter en sträng i en listruta. |
CListBox::FindStringExact |
Hittar den första listrutesträngen som matchar en angiven sträng. |
CListBox::GetAnchorIndex |
Hämtar det nollbaserade indexet för det aktuella fästpunktsobjektet i en listruta. |
CListBox::GetCaretIndex |
Avgör indexet för objektet som har fokusrektangeln i en listruta med flera val. |
CListBox::GetCount |
Returnerar antalet strängar i en listruta. |
CListBox::GetCurSel |
Returnerar det nollbaserade indexet för den markerade strängen i en listruta. |
CListBox::GetHorizontalExtent |
Returnerar bredden i bildpunkter som en listruta kan rullas vågrätt. |
CListBox::GetItemData |
Returnerar ett värde som är associerat med listruteobjektet. |
CListBox::GetItemDataPtr |
Returnerar en pekare till ett listruteobjekt. |
CListBox::GetItemHeight |
Avgör höjden på objekt i en listruta. |
CListBox::GetItemRect |
Returnerar avgränsningsrektangeln för list-box-objektet som det visas för närvarande. |
CListBox::GetListBoxInfo |
Hämtar antalet objekt per kolumn. |
CListBox::GetLocale |
Hämtar språkidentifieraren för en listruta. |
CListBox::GetSel |
Returnerar markeringstillståndet för ett listruteobjekt. |
CListBox::GetSelCount |
Returnerar det antal strängar som för närvarande är markerade i en listruta med flera val. |
CListBox::GetSelItems |
Returnerar indexen för de strängar som för närvarande är markerade i en listruta. |
CListBox::GetText |
Kopierar ett listruteobjekt till en buffert. |
CListBox::GetTextLen |
Returnerar längden i byte för ett list-box-objekt. |
CListBox::GetTopIndex |
Returnerar indexet för den första synliga strängen i en listruta. |
CListBox::InitStorage |
Förallokerar minnesblock för listruteobjekt och strängar. |
CListBox::InsertString |
Infogar en sträng på en specifik plats i en listruta. |
CListBox::ItemFromPoint |
Returnerar indexet för listruteobjektet närmast en punkt. |
CListBox::MeasureItem |
Anropas av ramverket när en listruta för ägardragning skapas för att fastställa listrutedimensioner. |
CListBox::ResetContent |
Rensar alla poster från en listruta. |
CListBox::SelectString |
Söker efter och väljer en sträng i en listruta med en enda markering. |
CListBox::SelItemRange |
Markerar eller avmarkerar ett intervall med strängar i en listruta med flera val. |
CListBox::SetAnchorIndex |
Anger fästpunkten i en listruta med flera val för att påbörja en utökad markering. |
CListBox::SetCaretIndex |
Anger fokusrektangeln till objektet vid det angivna indexet i en listruta med flera val. |
CListBox::SetColumnWidth |
Anger kolumnbredden för en listruta med flera kolumner. |
CListBox::SetCurSel |
Väljer en listrutesträng. |
CListBox::SetHorizontalExtent |
Anger bredden i bildpunkter som en listruta kan rullas vågrätt. |
CListBox::SetItemData |
Anger ett värde som är associerat med listruteobjektet. |
CListBox::SetItemDataPtr |
Anger en pekare till listruteobjektet. |
CListBox::SetItemHeight |
Anger höjden på objekt i en listruta. |
CListBox::SetLocale |
Anger språkidentifieraren för en listruta. |
CListBox::SetSel |
Markerar eller avmarkerar ett listruteobjekt i en listruta med flera val. |
CListBox::SetTabStops |
Anger tab-stop-positionerna i en listruta. |
CListBox::SetTopIndex |
Anger nollbaserat index för den första synliga strängen i en listruta. |
CListBox::VKeyToItem |
Åsidosätt för att tillhandahålla anpassad WM_KEYDOWN hantering för listrutor med formatuppsättningen LBS_WANTKEYBOARDINPUT . |
Anmärkningar
En listruta visar en lista med objekt, till exempel filnamn, som användaren kan visa och välja.
I en listruta med en enda markering kan användaren bara välja ett objekt. I en listruta med flera val kan du välja ett intervall med objekt. När användaren väljer ett objekt markeras det och listrutan skickar ett meddelande till det överordnade fönstret.
Du kan skapa en listruta antingen från en dialogmall eller direkt i koden. Om du vill skapa det direkt skapar du CListBox objektet och anropar Create sedan medlemsfunktionen för att skapa listrutekontrollen i Windows och koppla den till CListBox objektet. Om du vill använda en listruta i en dialogmall deklarerar du en listrutevariabel i din dialogruteklass och använder DDX_Control sedan funktionen i dialogruteklassen DoDataExchange för att ansluta medlemsvariabeln till kontrollen. (detta görs automatiskt när du lägger till en kontrollvariabel i din dialogruteklass.)
Konstruktion kan vara en process i ett steg i en klass som härleds från CListBox. Skriv en konstruktor för den härledda klassen och anropa Create inifrån konstruktorn.
Om du vill hantera Windows-meddelanden som skickas av en listruta till dess överordnade (vanligtvis en klass som härletts från CDialog) lägger du till en post för meddelandekarta och en medlemsfunktion för meddelandehanteraren i den överordnade klassen för varje meddelande.
Varje post för meddelandekartan har följande formulär:
ON_Notification( id, memberFxn )
där id anger det underordnade fönster-ID:t för listrutekontrollen som skickar meddelandet och memberFxn är namnet på den överordnade medlemsfunktion som du har skrivit för att hantera meddelandet.
Den överordnade funktionens prototyp är följande:
afx_msg void memberFxn( );
Följande är en lista över potentiella poster för meddelandekarta och en beskrivning av de fall där de skulle skickas till den överordnade:
ON_LBN_DBLCLKAnvändaren dubbelklickar på en sträng i en listruta. Endast en listruta medLBS_NOTIFYformatet skickar det här meddelandet.ON_LBN_ERRSPACEListrutan kan inte allokera tillräckligt med minne för att uppfylla begäran.ON_LBN_KILLFOCUSListrutan förlorar indatafokuset.ON_LBN_SELCANCELDen aktuella listrutemarkeringen avbryts. Det här meddelandet skickas bara när en listruta harLBS_NOTIFYformatet .ON_LBN_SELCHANGEMarkeringen i listrutan har ändrats. Det här meddelandet skickas inte om valet ändras avCListBox::SetCurSelmedlemsfunktionen. Det här meddelandet gäller endast för en listruta som harLBS_NOTIFYformatet . MeddelandemeddelandetLBN_SELCHANGEskickas för en listruta med flera val när användaren trycker på en piltangent, även om markeringen inte ändras.ON_LBN_SETFOCUSListrutan tar emot indatafokus.ON_WM_CHARTOITEMEn listruta för ägardragning som inte har några strängar tar emot ettWM_CHARmeddelande.ON_WM_VKEYTOITEMEn listruta medLBS_WANTKEYBOARDINPUTformatet tar emot ettWM_KEYDOWNmeddelande.
Om du skapar ett CListBox objekt i en dialogruta (via en dialogresurs) CListBox förstörs objektet automatiskt när användaren stänger dialogrutan.
Om du skapar ett CListBox objekt i ett fönster kan du behöva förstöra objektet CListBox . Om du skapar CListBox objektet på stacken förstörs det automatiskt. Om du skapar CListBox objektet på heapen new med hjälp av funktionen måste du anropa delete objektet för att förstöra det när användaren stänger det överordnade fönstret.
Om du allokerar minne i CListBox objektet åsidosätter CListBox du destructor för att ta bort allokeringen.
Arvshierarki
CListBox
Kravspecifikation
Rubrik:afxwin.h
CListBox::AddString
Lägger till en sträng i en listruta.
int AddString(LPCTSTR lpszItem);
Parameterar
lpszItem
Pekar på den null-avslutade sträng som ska läggas till.
Returvärde
Det nollbaserade indexet till strängen i listrutan. Returvärdet är LB_ERR om ett fel uppstår. Returvärdet är LB_ERRSPACE om det inte finns tillräckligt med utrymme för att lagra den nya strängen.
Anmärkningar
Om listrutan inte har skapats med LBS_SORT formatet läggs strängen till i slutet av listan. Annars infogas strängen i listan och listan sorteras. Om listrutan skapades med LBS_SORT formatet men inte LBS_HASSTRINGS formatet sorterar ramverket listan efter ett eller flera anrop till CompareItem medlemsfunktionen.
Använd InsertString för att infoga en sträng på en specifik plats i listrutan.
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
Anropas av ramverket när listrutans överordnade fönster tar emot ett WM_CHARTOITEM meddelande från listrutan.
virtual int CharToItem(
UINT nKey,
UINT nIndex);
Parameterar
nKey
ANSI-koden för tecknet som användaren skrev.
nIndex
Listrute-caretens aktuella position.
Returvärde
Returnerar - 1 eller - 2 utan ytterligare åtgärd eller ett icke-administrativt tal för att ange ett index för ett listruteobjekt där standardåtgärden för tangenttryckningen ska utföras. Standardimplementeringen returnerar - 1.
Anmärkningar
Meddelandet WM_CHARTOITEM skickas av listrutan när det tar emot ett WM_CHAR meddelande, men bara om listrutan uppfyller alla dessa kriterier:
Är en listruta för ägardragning.
Har inte formatuppsättningen
LBS_HASSTRINGS.Har minst ett objekt.
Du bör aldrig anropa den här funktionen själv. Åsidosätt den här funktionen för att tillhandahålla din egen anpassade hantering av tangentbordsmeddelanden.
I åsidosättningen måste du returnera ett värde för att berätta för ramverket vilken åtgärd du utförde. Ett returvärde på - 1 eller - 2 anger att du hanterade alla aspekter av att välja objektet och kräver ingen ytterligare åtgärd i listrutan. Innan du returnerar - 1 eller - 2 kan du ange markeringen eller flytta caret eller båda. Om du vill ange markeringen använder du SetCurSel eller SetSel. Om du vill flytta caret använder du SetCaretIndex.
Ett returvärde på 0 eller senare anger indexet för ett objekt i listrutan och anger att listrutan ska utföra standardåtgärden för tangenttryckningen på det angivna objektet.
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
Konstruerar ett CListBox objekt.
CListBox();
Anmärkningar
Du skapar ett CListBox objekt i två steg. Anropa först konstruktorn ClistBox och anropa Createsedan , som initierar Rutan Windows-lista och kopplar den till CListBox.
Example
// Declare a local CListBox object.
CListBox myListBox;
// Declare a dynamic CListBox object.
CListBox *pmyListBox = new CListBox;
CListBox::CompareItem
Anropas av ramverket för att fastställa den relativa positionen för ett nytt objekt i en sorterad listruta för ägardragning.
virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
Parameterar
lpCompareItemStruct
En lång pekare till en COMPAREITEMSTRUCT struktur.
Returvärde
Anger den relativa positionen för de två objekt som beskrivs i COMPAREITEMSTRUCT strukturen. Det kan vara något av följande värden:
| Värde | Meaning |
|---|---|
| -1 | Objekt 1 sorterar före objekt 2. |
| 0 | Objekt 1 och objekt 2 sorterar på samma sätt. |
| 1 | Objekt 1 sorterar efter objekt 2. |
Se CWnd::OnCompareItem en beskrivning av COMPAREITEMSTRUCT strukturen.
Anmärkningar
Som standard gör den här medlemsfunktionen ingenting. Om du skapar en listruta för ägardragning med LBS_SORT formatet måste du åsidosätta den här medlemsfunktionen för att hjälpa ramverket att sortera nya objekt som lagts till i listrutan.
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
Skapar listrutan i Windows och bifogar den CListBox till objektet.
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
Parameterar
dwStyle
Anger listrutans formatmall. Använd valfri kombination av listruteformat i rutan.
rect
Anger listrutans storlek och position. Kan vara antingen ett CRect objekt eller en RECT struktur.
pParentWnd
Anger listrutans överordnade fönster (vanligtvis ett CDialog objekt). Det får inte vara NULL.
nID
Anger listrutans kontroll-ID.
Returvärde
Nonzero om det lyckas; annars 0.
Anmärkningar
Du skapar ett CListBox objekt i två steg. Anropa först konstruktorn och anropa Createsedan , som initierar Rutan Windows-lista och kopplar den till CListBox objektet.
När Create körs skickar Windows meddelandena WM_NCCREATE, WM_CREATE, WM_NCCALCSIZEoch WM_GETMINMAXINFO till listrutekontrollen.
Dessa meddelanden hanteras som standard av OnNcCreatefunktionerna , OnCreate, OnNcCalcSizeoch OnGetMinMaxInfo medlem i basklassen CWnd . Om du vill utöka standardmeddelandehanteringen härleder du en klass från CListBox, lägger till en meddelandekarta i den nya klassen och åsidosätter de föregående medlemsfunktionerna för meddelandehanteraren. Åsidosätt OnCreatetill exempel för att utföra nödvändig initiering för en ny klass.
Använd följande fönsterformat på en listrutekontroll.
WS_CHILDAlltidWS_VISIBLEVanligenWS_DISABLEDSällanWS_VSCROLLSå här lägger du till en lodrät rullningslistWS_HSCROLLSå här lägger du till en vågrät rullningslistWS_GROUPGruppera kontrollerWS_TABSTOPSå här tillåter du tabbning till den här kontrollen
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
Anropas av ramverket när användaren tar bort ett objekt från ett ägardragningsobjekt CListBox eller förstör listrutan.
virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
Parameterar
lpDeleteItemStruct
En lång pekare till en Windows-struktur DELETEITEMSTRUCT som innehåller information om det borttagna objektet.
Anmärkningar
Standardimplementeringen av den här funktionen gör ingenting. Åsidosätt den här funktionen för att rita om en listruta för ägardragning efter behov.
Se CWnd::OnDeleteItem en beskrivning av DELETEITEMSTRUCT strukturen.
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
Tar bort objektet på plats nIndex från listrutan.
int DeleteString(UINT nIndex);
Parameterar
nIndex
Anger det nollbaserade indexet för strängen som ska tas bort.
Returvärde
Antal strängar som finns kvar i listan. Returvärdet är LB_ERR om nIndex anger ett index som är större än antalet objekt i listan.
Anmärkningar
Alla objekt som följer nIndex flyttas nu ned en position. Om en listruta till exempel innehåller två objekt kommer borttagningen av det första objektet att leda till att det återstående objektet nu hamnar i den första positionen.
nIndex=0 för objektet i den första positionen.
Example
// Delete every other item from the list box.
for (int i = 0; i < m_myListBox.GetCount(); i++)
{
m_myListBox.DeleteString(i);
}
CListBox::Dir
Lägger till en lista över filnamn, enheter eller båda i en listruta.
int Dir(
UINT attr,
LPCTSTR lpszWildCard);
Parameterar
attr
Kan vara valfri kombination av de enum värden som beskrivs i CFile::GetStatus, eller någon kombination av följande värden:
| Värde | Meaning |
|---|---|
| 0x0000 | Filen kan läsas från eller skrivas till. |
| 0x0001 | Filen kan läsas från men inte skrivas till. |
| 0x0002 | Filen är dold och visas inte i en kataloglista. |
| 0x0004 | Filen är en systemfil. |
| 0x0010 | Namnet som anges av lpszWildCard anger en katalog. |
| 0x0020 | Filen har arkiverats. |
| 0x4000 | Inkludera alla enheter som matchar namnet som anges av lpszWildCard. |
| 0x8000 | Exklusiv flagga. Om den exklusiva flaggan har angetts visas endast filer av den angivna typen. I annat fall visas filer av den angivna typen utöver "normala" filer. |
lpszWildCard
Pekar på en filspecifikationssträng. Strängen kan innehålla jokertecken (till exempel *.*).
Returvärde
Det nollbaserade indexet för det senaste filnamnet som lades till i listan. Returvärdet är LB_ERR om ett fel inträffar. Returvärdet är LB_ERRSPACE om det inte finns tillräckligt med utrymme för att lagra de nya strängarna.
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
Anropas av ramverket när en visuell aspekt av en listruta för ägardragning ändras.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Parameterar
lpDrawItemStruct
En lång pekare till en DRAWITEMSTRUCT struktur som innehåller information om vilken typ av ritning som krävs.
Anmärkningar
Strukturens itemActionDRAWITEMSTRUCT medlemmar och itemState definierar den ritningsåtgärd som ska utföras.
Som standard gör den här medlemsfunktionen ingenting. Åsidosätt den här medlemsfunktionen för att implementera ritning för ett ägarritningsobjekt CListBox . Programmet ska återställa alla GDI-objekt (grafikenhetsgränssnitt) som valts för visningskontexten som anges i lpDrawItemStruct innan den här medlemsfunktionen avslutas.
Se CWnd::OnDrawItem en beskrivning av DRAWITEMSTRUCT strukturen.
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
Söker efter den första strängen i en listruta som innehåller det angivna prefixet utan att ändra listrutemarkeringen.
int FindString(
int nStartAfter,
LPCTSTR lpszItem) const;
Parameterar
nStartAfter
Innehåller det nollbaserade indexet för objektet innan det första objektet som ska sökas igenom. När sökningen når längst ned i listrutan fortsätter den överst i listrutan tillbaka till det objekt som anges av nStartAfter. Om nStartAfter är -1 genomsöks hela listrutan från början.
lpszItem
Pekar på den null-avslutade strängen som innehåller prefixet att söka efter. Sökningen är skiftlägesoberoende, så den här strängen kan innehålla valfri kombination av versaler och gemener.
Returvärde
Det nollbaserade indexet för det matchande objektet eller LB_ERR om sökningen misslyckades.
Anmärkningar
SelectString Använd medlemsfunktionen för att både hitta och välja en sträng.
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
Hittar den första listrutesträngen som matchar strängen som anges i lpszFind.
int FindStringExact(
int nIndexStart,
LPCTSTR lpszFind) const;
Parameterar
nIndexStart
Anger det nollbaserade indexet för objektet innan det första objektet som ska sökas igenom. När sökningen når längst ned i listrutan fortsätter den överst i listrutan tillbaka till det objekt som anges av nIndexStart. Om nIndexStart är -1 genomsöks hela listrutan från början.
lpszFind
Pekar på den null-avslutade strängen att söka efter. Den här strängen kan innehålla ett fullständigt filnamn, inklusive tillägget. Sökningen är inte skiftlägeskänslig, så strängen kan innehålla valfri kombination av versaler och gemener.
Returvärde
Indexet för det matchande objektet eller LB_ERR om sökningen misslyckades.
Anmärkningar
Om listrutan skapades med ett ägardragningsformat men utan LBS_HASSTRINGS formatet FindStringExact försöker medlemsfunktionen matcha dubbelordsvärdet mot värdet lpszFindför .
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
Hämtar det nollbaserade indexet för det aktuella fästpunktsobjektet i listrutan.
int GetAnchorIndex() const;
Returvärde
Indexet för det aktuella fästpunktsobjektet, om det lyckas; annars LB_ERR.
Anmärkningar
I en listruta med flera val är fästpunktsobjektet det första eller sista objektet i ett block med sammanhängande markerade objekt.
Example
Se exemplet för CListBox::SetAnchorIndex.
CListBox::GetCaretIndex
Avgör indexet för objektet som har fokusrektangeln i en listruta med flera val.
int GetCaretIndex() const;
Returvärde
Det nollbaserade indexet för objektet som har fokusrektangeln i en listruta. Om listrutan är en listruta med en markering är returvärdet indexet för det markerade objektet.
Anmärkningar
Objektet kan vara markerat eller inte.
Example
Se exemplet för CListBox::SetCaretIndex.
CListBox::GetCount
Hämtar antalet objekt i en listruta.
int GetCount() const;
Returvärde
Antalet objekt i listrutan eller LB_ERR om ett fel inträffar.
Anmärkningar
Det returnerade antalet är ett större än indexvärdet för det sista objektet (indexet är nollbaserat).
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
Hämtar det nollbaserade indexet för det markerade objektet, om det finns något, i en listruta med en enda markering.
int GetCurSel() const;
Returvärde
Det nollbaserade indexet för det markerade objektet om det är en listruta med en enda markering. Det är LB_ERR om inget objekt är markerat för närvarande.
I en listruta med flera val visas indexet för det objekt som har fokus.
Anmärkningar
Anropa GetCurSel inte för en listruta med flera val. Använd CListBox::GetSelItems i stället.
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
Hämtar bredden i bildpunkter från listrutan med vilken den kan rullas vågrätt.
int GetHorizontalExtent() const;
Returvärde
Listrutans rullningsbara bredd i bildpunkter.
Anmärkningar
Detta gäller endast om listrutan har en vågrät rullningslist.
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
Hämtar det dubbelordsvärde som tillhandahålls av programmet som är associerat med det angivna listruteobjektet.
DWORD_PTR GetItemData(int nIndex) const;
Parameterar
nIndex
Anger det nollbaserade indexet för objektet i listrutan.
Returvärde
Värdet som är associerat med objektet eller LB_ERR om ett fel inträffar.
Anmärkningar
Dubbelordsvärdet var parametern för dwItemData ett SetItemData anrop.
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
Hämtar det angivna 32-bitarsvärdet som är associerat med det angivna listruteobjektet som pekare (void*).
void* GetItemDataPtr(int nIndex) const;
Parameterar
nIndex
Anger det nollbaserade indexet för objektet i listrutan.
Returvärde
Hämtar en pekare eller -1 om ett fel inträffar.
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
Avgör höjden på objekt i en listruta.
int GetItemHeight(int nIndex) const;
Parameterar
nIndex
Anger det nollbaserade indexet för objektet i listrutan. Den här parametern används endast om listrutan har LBS_OWNERDRAWVARIABLE formatet. Annars ska den vara inställd på 0.
Returvärde
Höjden, i bildpunkter, på objekten i listrutan. Om listrutan har LBS_OWNERDRAWVARIABLE formatet är returvärdet höjden på det objekt som anges av nIndex. Om ett fel inträffar är LB_ERRreturvärdet .
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
Hämtar dimensionerna för rektangeln som begränsar ett list-box-objekt som det visas för närvarande i listrutan.
int GetItemRect(
int nIndex,
LPRECT lpRect) const;
Parameterar
nIndex
Anger objektets nollbaserade index.
lpRect
Anger en lång pekare till en RECT struktur som tar emot listruteklientkoordinaterna för objektet.
Returvärde
LB_ERR om ett fel inträffar.
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
Hämtar antalet objekt per kolumn.
DWORD GetListBoxInfo() const;
Returvärde
Antal objekt per kolumn i CListBox objektet.
Anmärkningar
Den här medlemsfunktionen emulerar funktionen i LB_GETLISTBOXINFO meddelandet enligt beskrivningen i Windows SDK.
CListBox::GetLocale
Hämtar språkvarianten som används av listrutan.
LCID GetLocale() const;
Returvärde
Värdet för språkidentifierare (LCID) för strängarna i listrutan.
Anmärkningar
Språkvarianten används till exempel för att fastställa sorteringsordningen för strängarna i en sorterad listruta.
Example
Se exemplet för CListBox::SetLocale.
CListBox::GetSel
Hämtar markeringstillståndet för ett objekt.
int GetSel(int nIndex) const;
Parameterar
nIndex
Anger objektets nollbaserade index.
Returvärde
Ett positivt tal om det angivna objektet har valts. annars är det 0. Returvärdet är LB_ERR om ett fel inträffar.
Anmärkningar
Den här medlemsfunktionen fungerar med listrutor med både en och flera val.
Om du vill hämta indexet för det markerade listruteobjektet använder du CListBox::GetCurSel.
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
Hämtar det totala antalet markerade objekt i en listruta med flera val.
int GetSelCount() const;
Returvärde
Antalet markerade objekt i en listruta. Om listrutan är en listruta med en markering är LB_ERRreturvärdet .
Example
Se exemplet för CListBox::GetSelItems.
CListBox::GetSelItems
Fyller en buffert med en matris med heltal som anger objektnumren för markerade objekt i en listruta med flera val.
int GetSelItems(
int nMaxItems,
LPINT rgIndex) const;
Parameterar
nMaxItems
Anger det maximala antalet markerade objekt vars artikelnummer ska placeras i bufferten.
rgIndex
Anger en pekare till en buffert som är tillräckligt stor för det antal heltal som anges av nMaxItems.
Returvärde
Det faktiska antalet objekt som placeras i bufferten. Om listrutan är en listruta med en markering är LB_ERRreturvärdet .
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
Hämtar en sträng från en listruta.
int GetText(
int nIndex,
LPTSTR lpszBuffer) const;
void GetText(
int nIndex,
CString& rString) const;
Parameterar
nIndex
Anger det nollbaserade indexet för strängen som ska hämtas.
lpszBuffer
Pekar på bufferten som tar emot strängen. Bufferten måste ha tillräckligt med utrymme för strängen och ett avslutande null-tecken. Storleken på strängen kan fastställas i förväg genom att anropa GetTextLen medlemsfunktionen.
rString
En referens till ett CString objekt.
Returvärde
Längden (i byte) på strängen, exklusive det avslutande null-tecknet. Om nIndex inte anger ett giltigt index är LB_ERRreturvärdet .
Anmärkningar
Den andra formen av den här medlemsfunktionen fyller ett CString objekt med strängtexten.
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
Hämtar längden på en sträng i ett listruteobjekt.
int GetTextLen(int nIndex) const;
Parameterar
nIndex
Anger strängens nollbaserade index.
Returvärde
Längden på strängen i tecken, exklusive det avslutande null-tecknet. Om nIndex inte anger ett giltigt index är LB_ERRreturvärdet .
Example
Se exemplet för CListBox::GetText.
CListBox::GetTopIndex
Hämtar det nollbaserade indexet för det första synliga objektet i en listruta.
int GetTopIndex() const;
Returvärde
Det nollbaserade indexet för det första synliga objektet i en listruta om det lyckas, LB_ERR annars.
Anmärkningar
Till en början är objekt 0 överst i listrutan, men om listrutan rullas kan ett annat objekt vara överst.
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
Allokerar minne för lagring av listruteobjekt.
int InitStorage(
int nItems,
UINT nBytes);
Parameterar
nItems
Anger antalet objekt som utrymme ska reserveras för.
nBytes
Anger mängden extra minne i byte som ska allokeras för objektsträngar.
Returvärde
Om det lyckas krävs det maximala antalet objekt som listrutan kan lagra innan en minnesomfördelning, annars LB_ERRSPACE, vilket innebär att det inte finns tillräckligt med minne.
Anmärkningar
Du kan anropa den här funktionen innan du lägger till ett stort antal objekt i en CListBox.
Den här funktionen hjälper till att påskynda initieringen av listrutor som har ett stort antal objekt (mer än 100). Den förallokerar den angivna mängden minne så att efterföljande AddString, InsertStringoch Dir -funktioner blir mer effektiva. Du kan använda uppskattningar för parametrarna. Om du överskattar förblir det extra minnet allokerat. Om du underskattar allokerar listrutan ytterligare minne efter behov.
Det minne som krävs för att lagra en sträng innehåller null-avslutaren. Om du planerar att lägga till 100 strängar, var och en med en längd på 10 tecken, skickar du därför en wParam på 100 och en lParam på 100 × (10 + 1) × sizeof(TCHAR).
Endast Windows 95/98: Parametern nItems är begränsad till 16-bitarsvärden. Det innebär att listrutor inte får innehålla fler än 32 767 objekt. Även om antalet objekt är begränsat begränsas den totala storleken på objekten i en listruta endast av tillgängligt minne.
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
Infogar en sträng i listrutan.
int InsertString(
int nIndex,
LPCTSTR lpszItem);
Parameterar
nIndex
Anger det nollbaserade indexet för positionen för att infoga strängen. Om den här parametern är -1 läggs strängen till i slutet av listan.
lpszItem
Pekar på den null-avslutade sträng som ska infogas.
Returvärde
Det nollbaserade indexet för den position där strängen infogades. Returvärdet är LB_ERR om ett fel uppstår. Returvärdet är LB_ERRSPACE om det inte finns tillräckligt med utrymme för att lagra den nya strängen.
Anmärkningar
AddString Till skillnad från medlemsfunktionen InsertString leder det inte till att en lista med LBS_SORT formatet sorteras.
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
Avgör list-box-objektet närmast den punkt som anges i pt.
UINT ItemFromPoint(
CPoint pt,
BOOL& bOutside) const;
Parameterar
pt
Punkt som du vill hitta närmaste objekt för, som anges i förhållande till det övre vänstra hörnet i klientområdet i listrutan.
bOutside
Referens till en BOOL variabel som anges till TRUE om pt den ligger utanför klientområdet i listrutan, FALSE om pt den finns i klientområdet i listrutan.
Returvärde
Indexet för närmaste objekt till den punkt som anges i pt.
Anmärkningar
Du kan använda den här funktionen för att avgöra vilket listruteobjekt som musmarkören flyttar över.
Example
Se exemplet för CListBox::SetAnchorIndex.
CListBox::MeasureItem
Anropas av ramverket när en listruta med ägardragningsformat skapas.
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
Parameterar
lpMeasureItemStruct
En lång pekare till en MEASUREITEMSTRUCT struktur.
Anmärkningar
Som standard gör den här medlemsfunktionen ingenting. Åsidosätt den här medlemsfunktionen och fyll i MEASUREITEMSTRUCT strukturen för att informera Windows om listrutedimensionerna. Om listrutan skapas med LBS_OWNERDRAWVARIABLE formatet anropar ramverket den här medlemsfunktionen för varje objekt i listrutan. Annars anropas den här medlemmen bara en gång.
Mer information om hur du använder LBS_OWNERDRAWFIXED formatet i en listruta för ägardragning som skapats med SubclassDlgItem medlemsfunktionen CWndi finns i diskussionen i Technical Note 14.
Se CWnd::OnMeasureItem en beskrivning av MEASUREITEMSTRUCT strukturen.
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
Tar bort alla objekt från en listruta.
void ResetContent();
Example
// Delete all the items from the list box.
m_myListBox.ResetContent();
ASSERT(m_myListBox.GetCount() == 0);
CListBox::SelectString
Söker efter ett listruteobjekt som matchar den angivna strängen, och om ett matchande objekt hittas väljer det objektet.
int SelectString(
int nStartAfter,
LPCTSTR lpszItem);
Parameterar
nStartAfter
Innehåller det nollbaserade indexet för objektet innan det första objektet som ska sökas igenom. När sökningen når längst ned i listrutan fortsätter den överst i listrutan tillbaka till det objekt som anges av nStartAfter. Om nStartAfter är -1 genomsöks hela listrutan från början.
lpszItem
Pekar på den null-avslutade strängen som innehåller prefixet att söka efter. Sökningen är skiftlägesoberoende, så den här strängen kan innehålla valfri kombination av versaler och gemener.
Returvärde
Indexet för det markerade objektet om sökningen lyckades. Om sökningen misslyckades är LB_ERR returvärdet och den aktuella markeringen ändras inte.
Anmärkningar
Listrutan rullas om det behövs för att visa det markerade objektet.
Den här medlemsfunktionen kan inte användas med en listruta som har LBS_MULTIPLESEL formatet .
Ett objekt markeras endast om dess inledande tecken (från startpunkten) matchar tecknen i strängen som anges av lpszItem.
FindString Använd medlemsfunktionen för att hitta en sträng utan att välja objektet.
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
Markerar flera på varandra följande objekt i en listruta med flera val.
int SelItemRange(
BOOL bSelect,
int nFirstItem,
int nLastItem);
Parameterar
bSelect
Anger hur markeringen ska ställas in. Om bSelect är TRUEär strängen markerad och markerad. Om FALSEtas markmarkeringen bort och strängen inte längre är markerad.
nFirstItem
Anger det nollbaserade indexet för det första objektet som ska anges.
nLastItem
Anger nollbaserat index för det sista objektet som ska anges.
Returvärde
LB_ERR om ett fel inträffar.
Anmärkningar
Använd endast den här medlemsfunktionen med listrutor med flera val. Om du bara behöver markera ett objekt i en listruta med flera val , det vill säga om nFirstItem det är lika med nLastItem , anropar SetSel du medlemsfunktionen i stället.
Example
// Select half of the items.
m_myODListBox.SelItemRange(TRUE, 0, m_myODListBox.GetCount() / 2);
CListBox::SetAnchorIndex
Anger fästpunkten i en listruta med flera val för att påbörja en utökad markering.
void SetAnchorIndex(int nIndex);
Parameterar
nIndex
Anger det nollbaserade indexet för listruteobjektet som ska vara fästpunkten.
Anmärkningar
I en listruta med flera val är fästpunktsobjektet det första eller sista objektet i ett block med sammanhängande markerade objekt.
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
Anger fokusrektangeln till objektet vid det angivna indexet i en listruta med flera val.
int SetCaretIndex(
int nIndex,
BOOL bScroll = TRUE);
Parameterar
nIndex
Anger det nollbaserade indexet för objektet som ska ta emot fokusrektangeln i listrutan.
bScroll
Om det här värdet är 0 rullas objektet tills det är helt synligt. Om det här värdet inte är 0 rullas objektet tills det åtminstone är delvis synligt.
Returvärde
LB_ERR om ett fel inträffar.
Anmärkningar
Om objektet inte visas rullas det i vyn.
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
Anger bredden i bildpunkter för alla kolumner i en listruta med flera kolumner (skapas med LBS_MULTICOLUMN formatet).
void SetColumnWidth(int cxWidth);
Parameterar
cxWidth
Anger bredden i bildpunkter för alla kolumner.
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
Väljer en sträng och rullar den i vyn om det behövs.
int SetCurSel(int nSelect);
Parameterar
nSelect
Anger det nollbaserade indexet för strängen som ska väljas. Om nSelect är -1 är listrutan inställd på att inte ha någon markering.
Returvärde
LB_ERR om ett fel inträffar.
Anmärkningar
När den nya strängen är markerad tas markmarkeringen bort från den tidigare markerade strängen i listrutan.
Använd endast den här medlemsfunktionen med listrutor med en markering.
Om du vill ange eller ta bort en markering i en listruta med flera val använder du CListBox::SetSel.
Example
// Select the last item in the list box.
int nCount = m_myListBox.GetCount();
if (nCount > 0)
m_myListBox.SetCurSel(nCount - 1);
CListBox::SetHorizontalExtent
Anger bredden i bildpunkter med vilken en listruta kan rullas vågrätt.
void SetHorizontalExtent(int cxExtent);
Parameterar
cxExtent
Anger antalet bildpunkter som listrutan kan rullas vågrätt med.
Anmärkningar
Om listrutans storlek är mindre än det här värdet kommer den vågräta rullningslisten att rulla objekt vågrätt i listrutan. Om listrutan är lika stor eller större än det här värdet döljs den vågräta rullningslisten.
Om du vill svara på ett anrop till SetHorizontalExtentmåste listrutan ha definierats med WS_HSCROLL formatet .
Den här medlemsfunktionen är inte användbar för listrutor med flera rutor. För listrutor för flera rutor anropar du SetColumnWidth medlemsfunktionen.
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
Anger ett värde som är associerat med det angivna objektet i en listruta.
int SetItemData(
int nIndex,
DWORD_PTR dwItemData);
Parameterar
nIndex
Anger objektets nollbaserade index.
dwItemData
Anger det värde som ska associeras med objektet.
Returvärde
LB_ERR om ett fel inträffar.
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
Anger det 32-bitarsvärde som är associerat med det angivna objektet i en listruta till den angivna pekaren ( void*).
int SetItemDataPtr(
int nIndex,
void* pData);
Parameterar
nIndex
Anger objektets nollbaserade index.
pData
Anger pekaren som ska associeras med objektet.
Returvärde
LB_ERR om ett fel inträffar.
Anmärkningar
Den här pekaren är giltig under listrutans livslängd, även om objektets relativa position i listrutan kan ändras när objekt läggs till eller tas bort. Därför kan objektets index i rutan ändras, men pekaren förblir tillförlitlig.
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
Anger höjden på objekt i en listruta.
int SetItemHeight(
int nIndex,
UINT cyItemHeight);
Parameterar
nIndex
Anger det nollbaserade indexet för objektet i listrutan. Den här parametern används endast om listrutan har LBS_OWNERDRAWVARIABLE formatet. Annars ska den vara inställd på 0.
cyItemHeight
Anger objektets höjd, i bildpunkter.
Returvärde
LB_ERR om indexet eller höjden är ogiltigt.
Anmärkningar
Om listrutan har LBS_OWNERDRAWVARIABLE formatet anger den här funktionen höjden på objektet som anges av nIndex. Annars anger den här funktionen höjden på alla objekt i listrutan.
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
Anger språkidentifieraren för den här listrutan.
LCID SetLocale(LCID nNewLocale);
Parameterar
nNewLocale
Det nya språkidentifierarvärdet (LCID) som ska anges för listrutan.
Returvärde
Det tidigare värdet för språkidentifierare (LCID) för den här listrutan.
Anmärkningar
Om SetLocale inte anropas hämtas standardspråket från systemet. Det här systemets standardspråk kan ändras med hjälp av Kontrollpanelens regionala (eller internationella) program.
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
Väljer en sträng i en listruta med flera val.
int SetSel(
int nIndex,
BOOL bSelect = TRUE);
Parameterar
nIndex
Innehåller det nollbaserade indexet för strängen som ska anges. Om -1 läggs markeringen till eller tas bort från alla strängar, beroende på värdet bSelectför .
bSelect
Anger hur markeringen ska ställas in. Om bSelect är TRUEär strängen markerad och markerad. Om FALSEtas markmarkeringen bort och strängen inte längre är markerad. Den angivna strängen är markerad och markerad som standard.
Returvärde
LB_ERR om ett fel inträffar.
Anmärkningar
Använd endast den här medlemsfunktionen med listrutor med flera val.
Om du vill välja ett objekt från en listruta med en enda markering använder du CListBox::SetCurSel.
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
Anger tab-stop-positionerna i en listruta.
void SetTabStops();
BOOL SetTabStops(const int& cxEachStop);
BOOL SetTabStops(
int nTabStops,
LPINT rgTabStops);
Parameterar
cxEachStop
Tabbstopp anges vid varje cxEachStop dialogruta. Se rgTabStops en beskrivning av en dialogenhet.
nTabStops
Anger antalet tabbstopp som ska visas i listrutan.
rgTabStops
Pekar på den första medlemmen i en matris med heltal som innehåller tab-stop-positionerna i dialogenheter. En dialogenhet är ett vågrätt eller lodrätt avstånd. En vågrät dialogenhet är lika med en fjärdedel av den aktuella dialogrutans basbreddsenhet och en lodrät dialogruta är lika med en åttondel av den aktuella dialogrutans bashöjdsenhet. Dialogbasenheterna beräknas baserat på höjden och bredden på det aktuella systemteckensnittet. Windows-funktionen GetDialogBaseUnits returnerar de aktuella dialogbasenheterna i bildpunkter. Tabbstoppen måste sorteras i ökande ordning. bakåtflikar tillåts inte.
Returvärde
Nonzero om alla flikar har angetts; annars 0.
Anmärkningar
Om du vill ange tabbstopp till standardstorleken på 2 dialogenheter anropar du den parameterlösa versionen av den här medlemsfunktionen. Om du vill ange tabbstopp till en annan storlek än 2 anropar du versionen med cxEachStop argumentet .
Om du vill ange tabbstopp till en matris med storlekar använder du versionen med argumenten rgTabStops och nTabStops . Ett tabbstopp anges för varje värde i rgTabStops, upp till det tal som anges av nTabStops.
Om du vill svara på ett anrop till SetTabStops medlemsfunktionen måste listrutan ha skapats med LBS_USETABSTOPS formatet .
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
Ser till att ett visst listruteobjekt visas.
int SetTopIndex(int nIndex);
Parameterar
nIndex
Anger det nollbaserade indexet för listruteobjektet.
Returvärde
Noll om det lyckas eller LB_ERR om ett fel inträffar.
Anmärkningar
Systemet rullar listrutan tills antingen det objekt som anges av nIndex visas överst i listrutan eller det maximala rullningsintervallet har nåtts.
Example
// Set the first visible item in the list box to be the middle item
m_myListBox.SetTopIndex(m_myListBox.GetCount() / 2);
CListBox::VKeyToItem
Anropas av ramverket när listrutans överordnade fönster tar emot ett WM_VKEYTOITEM meddelande från listrutan.
virtual int VKeyToItem(
UINT nKey,
UINT nIndex);
Parameterar
nKey
Den virtuella nyckelkoden för nyckeln som användaren tryckte på. En lista över standardkoder för virtuella nycklar finns i Winuser.h
nIndex
Listrute-caretens aktuella position.
Returvärde
Returnerar - 2 för ingen ytterligare åtgärd, - 1 för standardåtgärden eller ett icke-administrativt tal för att ange ett index för ett listruteobjekt där standardåtgärden för tangenttryckningen ska utföras.
Anmärkningar
Meddelandet WM_VKEYTOITEM skickas av listrutan när det tar emot ett WM_KEYDOWN meddelande, men bara om listrutan uppfyller båda följande:
Har formatmallen
LBS_WANTKEYBOARDINPUTinställd.Har minst ett objekt.
Du bör aldrig anropa den här funktionen själv. Åsidosätt den här funktionen för att tillhandahålla din egen anpassade hantering av tangentbordsmeddelanden.
Du måste returnera ett värde för att tala om för ramverket vilken åtgärd som åsidosättningen har utfört. Ett returvärde på - 2 anger att programmet hanterade alla aspekter av att välja objektet och kräver ingen ytterligare åtgärd i listrutan. Innan du returnerar – 2 kan du ange markeringen eller flytta caret eller båda. Om du vill ange markeringen använder du SetCurSel eller SetSel. Om du vill flytta caret använder du SetCaretIndex.
Ett returvärde på - 1 anger att listrutan ska utföra standardåtgärden som svar på tangenttryckningen. Standardimplementeringen returnerar - 1.
Ett returvärde på 0 eller senare anger indexet för ett objekt i listrutan och anger att listrutan ska utföra standardåtgärden för tangenttryckningen på det angivna objektet.
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;
}
Se även
Ctrltest för MFC-exempel
CWnd klass
Hierarkidiagram
CWnd klass
CButton klass
CComboBox klass
CEdit klass
CScrollBar klass
CStatic klass