CListBox-klass

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_DBLCLK Användaren dubbelklickar på en sträng i en listruta. Endast en listruta med LBS_NOTIFY formatet skickar det här meddelandet.

  • ON_LBN_ERRSPACE Listrutan kan inte allokera tillräckligt med minne för att uppfylla begäran.

  • ON_LBN_KILLFOCUS Listrutan förlorar indatafokuset.

  • ON_LBN_SELCANCEL Den aktuella listrutemarkeringen avbryts. Det här meddelandet skickas bara när en listruta har LBS_NOTIFY formatet .

  • ON_LBN_SELCHANGE Markeringen i listrutan har ändrats. Det här meddelandet skickas inte om valet ändras av CListBox::SetCurSel medlemsfunktionen. Det här meddelandet gäller endast för en listruta som har LBS_NOTIFY formatet . Meddelandemeddelandet LBN_SELCHANGE skickas för en listruta med flera val när användaren trycker på en piltangent, även om markeringen inte ändras.

  • ON_LBN_SETFOCUS Listrutan tar emot indatafokus.

  • ON_WM_CHARTOITEM En listruta för ägardragning som inte har några strängar tar emot ett WM_CHAR meddelande.

  • ON_WM_VKEYTOITEM En listruta med LBS_WANTKEYBOARDINPUT formatet tar emot ett WM_KEYDOWN meddelande.

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

CObject

CCmdTarget

CWnd

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_CHILD Alltid

  • WS_VISIBLE Vanligen

  • WS_DISABLED Sällan

  • WS_VSCROLL Så här lägger du till en lodrät rullningslist

  • WS_HSCROLL Så här lägger du till en vågrät rullningslist

  • WS_GROUP Gruppera kontroller

  • WS_TABSTOP Så 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:

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