Dela via


CComboBox-klass

Tillhandahåller funktionerna i en Windows-kombinationsruta.

Syntax

class CComboBox : public CWnd

Members

Public Constructors

Name Description
CComboBox::CComboBox Konstruerar ett CComboBox objekt.

Public Methods

Name Description
CComboBox::AddString Lägger till en sträng i slutet av listan i listrutan i en kombinationsruta, eller vid den sorterade positionen för listrutor med CBS_SORT formatet .
CComboBox::Clear Tar bort (rensar) den aktuella markeringen, om någon, i redigeringskontrollen.
CComboBox::CompareItem Anropas av ramverket för att fastställa den relativa positionen för ett nytt listobjekt i en sorterad kombinationsruta för ägare.
CComboBox::Copy Kopierar den aktuella markeringen, om den finns, till Urklipp i CF_TEXT format.
CComboBox::Create Skapar kombinationsrutan och kopplar den CComboBox till objektet.
CComboBox::Cut Tar bort (klipper bort) den aktuella markeringen i redigeringskontrollen och kopierar den borttagna texten till Urklipp i CF_TEXT format.
CComboBox::DeleteItem Anropas av ramverket när ett listobjekt tas bort från en ägarritad kombinationsruta.
CComboBox::DeleteString Tar bort en sträng från listrutan i en kombinationsruta.
CComboBox::Dir Lägger till en lista med filnamn i listrutan i en kombinationsruta.
CComboBox::DrawItem Anropas av ramverket när en visuell aspekt av en ägarritad kombinationsruta ändras.
CComboBox::FindString Hittar den första strängen som innehåller det angivna prefixet i listrutan i en kombinationsruta.
CComboBox::FindStringExact Hittar den första listrutesträngen (i en kombinationsruta) som matchar den angivna strängen.
CComboBox::GetComboBoxInfo Hämtar information om objektet CComboBox .
CComboBox::GetCount Hämtar antalet objekt i listrutan i en kombinationsruta.
CComboBox::GetCueBanner Hämtar den kötext som visas för en kombinationsrutekontroll.
CComboBox::GetCurSel Hämtar indexet för det markerade objektet, om det finns något, i listrutan i en kombinationsruta.
CComboBox::GetDroppedControlRect Hämtar skärmkoordinaterna för listrutan synlig (nedrullningsad) i en listruta.
CComboBox::GetDroppedState Avgör om listrutan i en nedrullningsbara kombinationsruta är synlig (nedrullningsad).
CComboBox::GetDroppedWidth Hämtar den minsta tillåtna bredden för listrutan i en kombinationsruta.
CComboBox::GetEditSel Hämtar start- och slutteckenpositionerna för den aktuella markeringen i redigeringskontrollen för en kombinationsruta.
CComboBox::GetExtendedUI Avgör om en kombinationsruta har standardanvändargränssnittet eller det utökade användargränssnittet.
CComboBox::GetHorizontalExtent Returnerar bredden i bildpunkter som listrutans del av kombinationsrutan kan rullas vågrätt.
CComboBox::GetItemData Hämtar det 32-bitarsvärde som medföljer programmet som är associerat med det angivna kombinationsrutan.
CComboBox::GetItemDataPtr Hämtar 32-bitarspekaren från programmet som är associerad med det angivna kombinationsrutan.
CComboBox::GetItemHeight Hämtar höjden på listobjekt i en kombinationsruta.
CComboBox::GetLBText Hämtar en sträng från listrutan i en kombinationsruta.
CComboBox::GetLBTextLen Hämtar längden på en sträng i listrutan i en kombinationsruta.
CComboBox::GetLocale Hämtar språkidentifieraren för en kombinationsruta.
CComboBox::GetMinVisible Hämtar det minsta antalet synliga objekt i listrutan i den aktuella kombinationsrutan.
CComboBox::GetTopIndex Returnerar indexet för det första synliga objektet i listrutan i kombinationsrutan.
CComboBox::InitStorage Förallokerar minnesblock för objekt och strängar i listrutan i kombinationsrutan.
CComboBox::InsertString Infogar en sträng i listrutan i en kombinationsruta.
CComboBox::LimitText Begränsar längden på texten som användaren kan ange i redigeringskontrollen för en kombinationsruta.
CComboBox::MeasureItem Anropas av ramverket för att fastställa kombinationsrutedimensioner när en ägarritad kombinationsruta skapas.
CComboBox::Paste Infogar data från Urklipp i redigeringskontrollen vid den aktuella markörens position. Data infogas endast om Urklipp innehåller data i CF_TEXT format.
CComboBox::ResetContent Tar bort alla objekt från listrutan och redigerar kontrollen för en kombinationsruta.
CComboBox::SelectString Söker efter en sträng i listrutan i en kombinationsruta och om strängen hittas väljer du strängen i listrutan och kopierar strängen till redigeringskontrollen.
CComboBox::SetCueBanner Anger den kötext som visas för en kombinationsrutekontroll.
CComboBox::SetCurSel Väljer en sträng i listrutan i en kombinationsruta.
CComboBox::SetDroppedWidth Anger den minsta tillåtna bredden för listrutan i en kombinationsruta.
CComboBox::SetEditSel Markerar tecken i redigeringskontrollen för en kombinationsruta.
CComboBox::SetExtendedUI Väljer antingen standardanvändargränssnittet eller det utökade användargränssnittet för en kombinationsruta som har CBS_DROPDOWN formatet eller CBS_DROPDOWNLIST .
CComboBox::SetHorizontalExtent Anger bredden i bildpunkter som listrutans del av kombinationsrutan kan rullas vågrätt.
CComboBox::SetItemData Anger det 32-bitarsvärde som är associerat med det angivna objektet i en kombinationsruta.
CComboBox::SetItemDataPtr Anger den 32-bitars pekare som är associerad med det angivna objektet i en kombinationsruta.
CComboBox::SetItemHeight Anger höjden på listobjekt i en kombinationsruta eller höjden på redigeringskontrolldelen (eller statisk text) i en kombinationsruta.
CComboBox::SetLocale Anger språkidentifieraren för en kombinationsruta.
CComboBox::SetMinVisibleItems Anger det minsta antalet synliga objekt i listrutan i den aktuella kombinationsrutan.
CComboBox::SetTopIndex Anger att listrutedelen i kombinationsrutan ska visa objektet med det angivna indexet överst.
CComboBox::ShowDropDown Visar eller döljer listrutan i en kombinationsruta som har formatmallen CBS_DROPDOWN eller CBS_DROPDOWNLIST .

Remarks

En kombinationsruta består av en listruta kombinerad med antingen en statisk kontroll eller redigeringskontroll. Listrutedelen av kontrollen kan visas hela tiden eller kanske bara visas när användaren väljer listrutepilen bredvid kontrollen.

Det markerade objektet (om det finns) i listrutan visas i den statiska kontrollen eller redigeringskontrollen. Om kombinationsrutan dessutom har listruteformatet kan användaren ange det första tecknet för ett av objekten i listan, och listrutan, om den visas, markerar nästa objekt med det inledande tecknet.

I följande tabell jämförs de tre kombinationsruteformaten.

Style När visas listrutan Statisk kontroll eller redigeringskontroll
Simple Always Edit
Drop-down När nedsläppt Edit
Drop-down list När nedsläppt Static

Du kan skapa ett CComboBox objekt från antingen en dialogmall eller direkt i koden. I båda fallen anropar du först konstruktorn CComboBox för att konstruera CComboBox objektet. Anropa Create sedan medlemsfunktionen för att skapa kontrollen och koppla den CComboBox till objektet.

Om du vill hantera Windows-meddelanden som skickas av en kombinationsruta till dess överordnade (vanligtvis en klass som härletts från CDialog) lägger du till en 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 combo-box-kontrollen 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( );

Det går inte att förutse i vilken ordning vissa meddelanden skickas. I synnerhet kan ett CBN_SELCHANGE meddelande inträffa före eller efter ett CBN_CLOSEUP meddelande.

Potentiella posterna på meddelandekartan är följande:

  • ON_CBN_CLOSEUP (Windows 3.1 och senare.) Listrutan för en kombinationsruta har stängts. Det här meddelandemeddelandet skickas inte för en kombinationsruta som har CBS_SIMPLE formatet .

  • ON_CBN_DBLCLK Användaren dubbelklickar på en sträng i listrutan i en kombinationsruta. Det här meddelandemeddelandet skickas endast för en kombinationsruta med CBS_SIMPLE formatet . För en kombinationsruta med formatmallen CBS_DROPDOWN eller CBS_DROPDOWNLIST kan dubbelklicka inte inträffa eftersom ett enda klick döljer listrutan.

  • ON_CBN_DROPDOWN Listrutan i en kombinationsruta håller på att listrutan (visas). Det här meddelandemeddelandet kan endast ske för en kombinationsruta med CBS_DROPDOWN formatet eller CBS_DROPDOWNLIST .

  • ON_CBN_EDITCHANGE Användaren har vidtagit en åtgärd som kan ha ändrat texten i redigeringskontrolldelen i en kombinationsruta. Till skillnad från meddelandet CBN_EDITUPDATE skickas det här meddelandet när Windows har uppdaterat skärmen. Den skickas inte om kombinationsrutan har CBS_DROPDOWNLIST formatet .

  • ON_CBN_EDITUPDATE Redigeringskontrolldelen i en kombinationsruta håller på att visa ändrad text. Det här meddelandemeddelandet skickas när kontrollen har formaterat texten men innan texten visas. Den skickas inte om kombinationsrutan har CBS_DROPDOWNLIST formatet .

  • ON_CBN_ERRSPACE Kombinationsrutan kan inte allokera tillräckligt med minne för att uppfylla en specifik begäran.

  • ON_CBN_SELENDCANCEL (Windows 3.1 och senare.) Anger att användarens val ska avbrytas. Användaren klickar på ett objekt och klickar sedan på ett annat fönster eller en annan kontroll för att dölja listrutan i en kombinationsruta. Det här meddelandemeddelandet skickas innan CBN_CLOSEUP meddelandemeddelandet anger att användarens val ska ignoreras. Meddelandet CBN_SELENDCANCEL eller CBN_SELENDOK meddelandet skickas även om aviseringsmeddelandet CBN_CLOSEUP inte skickas (som i fallet med en kombinationsruta med CBS_SIMPLE formatet).

  • ON_CBN_SELENDOK Användaren väljer ett objekt och trycker sedan antingen på RETUR-tangenten eller klickar på NEDÅTPIL för att dölja listrutan i en kombinationsruta. Det här aviseringsmeddelandet skickas innan meddelandet CBN_CLOSEUP anger att användarens val ska betraktas som giltigt. Meddelandet CBN_SELENDCANCEL eller CBN_SELENDOK meddelandet skickas även om aviseringsmeddelandet CBN_CLOSEUP inte skickas (som i fallet med en kombinationsruta med CBS_SIMPLE formatet).

  • ON_CBN_KILLFOCUS Kombinationsrutan förlorar indatafokuset.

  • ON_CBN_SELCHANGE Markeringen i listrutan i en kombinationsruta kommer att ändras till följd av att användaren antingen klickar i listrutan eller ändrar markeringen med hjälp av piltangenterna. När du bearbetar det här meddelandet kan texten i redigeringskontrollen för kombinationsrutan endast hämtas via GetLBText eller en annan liknande funktion. GetWindowText kan inte användas.

  • ON_CBN_SETFOCUS Kombinationsrutan tar emot indatafokus.

Om du skapar ett CComboBox objekt i en dialogruta (via en dialogresurs) CComboBox förstörs objektet automatiskt när användaren stänger dialogrutan.

Om du bäddar in ett objekt i ett CComboBox annat fönsterobjekt behöver du inte förstöra det. Om du skapar CComboBox objektet på stacken förstörs det automatiskt. Om du skapar CComboBox objektet på heapen new med hjälp av funktionen måste du anropa delete objektet för att förstöra det när Windows-kombinationsrutan förstörs.

Not Om du vill hantera WM_KEYDOWN och WM_CHAR meddelanden måste du underklassera kombinationsrutans redigerings- och listrutekontroller, härleda klasser från CEdit och CListBoxoch och lägga till hanterare för dessa meddelanden till de härledda klasserna. Mer information finns i CWnd::SubclassWindow.

Inheritance Hierarchy

CObject

CCmdTarget

CWnd

CComboBox

Requirements

Header:afxwin.h

CComboBox::AddString

Lägger till en sträng i listrutan i en kombinationsruta.

int AddString(LPCTSTR lpszString);

Parameters

lpszString
Pekar på den null-avslutade sträng som ska läggas till.

Return Value

Om returvärdet är större än eller lika med 0 är det det nollbaserade indexet till strängen i listrutan. Returvärdet är CB_ERR om ett fel uppstår. Returvärdet är CB_ERRSPACE om det inte finns tillräckligt med utrymme för att lagra den nya strängen.

Remarks

Om listrutan inte har skapats med CBS_SORT formatet läggs strängen till i slutet av listan. Annars infogas strängen i listan och listan sorteras.

Note

Den här funktionen stöds inte av Windows-kontrollen ComboBoxEx . Mer information om den här kontrollen ComboBoxEx finns i Kontroller i Windows SDK.

Om du vill infoga en sträng på en specifik plats i listan använder du InsertString medlemsfunktionen.

Example

// Add 20 items to the combo box.
CString str;
for (int i = 0; i < 20; i++)
{
   str.Format(_T("item string %d"), i);
   m_pComboBox->AddString(str);
}

CComboBox::CComboBox

Konstruerar ett CComboBox objekt.

CComboBox();

Example

// Declare a local CComboBox object.
CComboBox myComboBox;

// Declare a dynamic CComboBox object.
CComboBox *pmyComboBox = new CComboBox;

CComboBox::Clear

Tar bort (avmarkerar) den aktuella markeringen, om någon, i redigeringskontrollen för kombinationsrutan.

void Clear();

Remarks

Om du vill ta bort den aktuella markeringen och placera det borttagna innehållet på Urklipp använder du Cut medlemsfunktionen.

Example

// Delete all of the text from the combo box's edit control.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Clear();

CComboBox::CompareItem

Anropas av ramverket för att fastställa den relativa positionen för ett nytt objekt i listrutan i en sorterad kombinationsruta för ägardragning.

virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);

Parameters

lpCompareItemStruct
En lång pekare till en COMPAREITEMSTRUCT struktur.

Return Value

Anger den relativa positionen för de två objekt som beskrivs i COMPAREITEMSTRUCT strukturen. Det kan vara något av följande värden:

Value 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.

Remarks

Som standard gör den här medlemsfunktionen ingenting. Om du skapar en kombinationsruta 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

// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example compares two items using strcmp to sort items in reverse
// alphabetical order. The combo box control was created with the
// following code:
//   pmyComboBox->Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      CBS_SORT|CBS_OWNERDRAWVARIABLE,
//      myRect, pParentWnd, 1);
//
int CMyComboBox::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
   int iComp = 0;
   ASSERT(lpCompareItemStruct->CtlType == ODT_COMBOBOX);
   LPCTSTR lpszText1 = (LPCTSTR)lpCompareItemStruct->itemData1;
   ASSERT(lpszText1 != NULL);
   LPCTSTR lpszText2 = (LPCTSTR)lpCompareItemStruct->itemData2;
   ASSERT(lpszText2 != NULL);

   if (NULL != lpszText1 && NULL != lpszText2)
   {
      iComp = _tcscmp(lpszText2, lpszText1);
   }

   return iComp;
}

CComboBox::Copy

Kopierar den aktuella markeringen, om någon, i redigeringskontrollen för kombinationsrutan till Urklipp i CF_TEXT format.

void Copy();

Example

// Copy all of the text from the combo box's edit control
// to the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Copy();

CComboBox::Create

Skapar kombinationsrutan och kopplar den CComboBox till objektet.

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

Parameters

dwStyle
Anger kombinationsrutans formatmall. Använd valfri kombination av kombinationsruteformat i rutan.

rect
Pekar på kombinationsrutans position och storlek. Kan vara en RECT struktur eller ett CRect objekt.

pParentWnd
Anger kombinationsrutans överordnade fönster (vanligtvis en CDialog). Det får inte vara NULL.

nID
Anger kombinationsrutans kontroll-ID.

Return Value

Nonzero om det lyckas; annars 0.

Remarks

Du skapar ett CComboBox objekt i två steg. Anropa först konstruktorn och anropa Createsedan , som skapar Windows-kombinationsrutan och kopplar den till CComboBox objektet.

När Create körs skickar Windows meddelandena WM_NCCREATE, WM_CREATE, WM_NCCALCSIZEoch WM_GETMINMAXINFO till kombinationsrutan.

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 CComboBox, 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 kombinationsrutekontroll. :

  • WS_CHILD Alltid

  • WS_VISIBLE Vanligen

  • WS_DISABLED Sällan

  • WS_VSCROLL Så här lägger du till lodrät rullning för listrutan i kombinationsrutan

  • WS_HSCROLL Så här lägger du till vågrät rullning för listrutan i kombinationsrutan

  • WS_GROUP Gruppera kontroller

  • WS_TABSTOP Inkludera kombinationsrutan i tabbordningen

Example

m_pComboBox->Create(
    WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST,
    CRect(10, 10, 200, 100), pParentWnd, 1);

CComboBox::Cut

Tar bort (klipper bort) den aktuella markeringen, om någon, i kombinationsrutans redigeringskontroll och kopierar den borttagna texten till Urklipp i CF_TEXT format.

void Cut();

Remarks

Om du vill ta bort den aktuella markeringen utan att placera den borttagna texten i Urklipp anropar Clear du medlemsfunktionen.

Example

// Delete all of the text from the combo box's edit control and copy it
// to the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Cut();

CComboBox::DeleteItem

Anropas av ramverket när användaren tar bort ett objekt från ett ägardragningsobjekt CComboBox eller förstör kombinationsrutan.

virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);

Parameters

lpDeleteItemStruct
En lång pekare till en Windows-struktur DELETEITEMSTRUCT som innehåller information om det borttagna objektet. Se CWnd::OnDeleteItem en beskrivning av den här strukturen.

Remarks

Standardimplementeringen av den här funktionen gör ingenting. Åsidosätt den här funktionen för att rita om kombinationsrutan efter behov.

Example

// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example simply dumps the item's text. The combo box control was
// created with the following code:
//   pmyComboBox->Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      CBS_SORT|CBS_OWNERDRAWVARIABLE,
//      myRect, pParentWnd, 1);
//
void CMyComboBox::DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct)
{
   ASSERT(lpDeleteItemStruct->CtlType == ODT_COMBOBOX);
   LPTSTR lpszText = (LPTSTR)lpDeleteItemStruct->itemData;
   ASSERT(lpszText != NULL);

   AFXDUMP(lpszText);
}

CComboBox::DeleteString

Tar bort objektet på plats nIndex från kombinationsrutan.

int DeleteString(UINT nIndex);

Parameters

nIndex
Anger indexet för strängen som ska tas bort.

Return Value

Om returvärdet är större än eller lika med 0 är det antalet strängar som finns kvar i listan. Returvärdet är CB_ERR om nIndex anger ett index som är större än antalet objekt i listan.

Remarks

Alla objekt som följer nIndex flyttas nu ned en position. Om en kombinationsruta till exempel innehåller två objekt kommer borttagning av det första objektet att leda till att det återstående objektet nu befinner sig i den första positionen. nIndex=0 för objektet i den första positionen.

Example

// Delete every item from the combo box.
for (int i = m_pComboBox->GetCount() - 1; i >= 0; i--)
{
   m_pComboBox->DeleteString(i);
}

CComboBox::Dir

Lägger till en lista med filnamn eller enheter i listrutan i en kombinationsruta.

int Dir(
    UINT attr,
    LPCTSTR lpszWildCard);

Parameters

attr
Kan vara valfri kombination av de enum värden som beskrivs i CFile::GetStatus eller någon kombination av följande värden:

  • DDL_READWRITE Filen kan läsas från eller skrivas till.

  • DDL_READONLY Filen kan läsas från men inte skrivas till.

  • DDL_HIDDEN Filen är dold och visas inte i en kataloglista.

  • DDL_SYSTEM Filen är en systemfil.

  • DDL_DIRECTORY Namnet som anges av lpszWildCard anger en katalog.

  • DDL_ARCHIVE Filen har arkiverats.

  • DDL_DRIVES Inkludera alla enheter som matchar namnet som anges av lpszWildCard.

  • DDL_EXCLUSIVE 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 *.*).

Return Value

Om returvärdet är större än eller lika med 0 är det det nollbaserade indexet för det efternamn som lades till i listan. Returvärdet är CB_ERR om ett fel inträffar. Returvärdet är CB_ERRSPACE om det inte finns tillräckligt med utrymme för att lagra de nya strängarna.

Remarks

Den här funktionen stöds inte av Windows-kontrollen ComboBoxEx . Mer information om den här kontrollen ComboBoxEx finns i Kontroller i Windows SDK.

Example

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

// Make the windows directory the current directory.
::GetCurrentDirectory(MAX_PATH, lpszOldPath);
::SetCurrentDirectory(lpszWinPath);

m_pComboBox->ResetContent();
m_pComboBox->Dir(DDL_READWRITE | DDL_DIRECTORY, _T("*.*"));

// Reset the current directory to its previous path.
::SetCurrentDirectory(lpszOldPath);

CComboBox::DrawItem

Anropas av ramverket när en visuell aspekt av en kombinationsruta för ägardragning ändras.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

Parameters

lpDrawItemStruct
En pekare till en DRAWITEMSTRUCT struktur som innehåller information om vilken typ av ritning som krävs.

Remarks

Medlemmen itemAction i DRAWITEMSTRUCT strukturen definierar den ritningsåtgärd som ska utföras. Se CWnd::OnDrawItem en beskrivning av den här strukturen.

Som standard gör den här medlemsfunktionen ingenting. Åsidosätt den här medlemsfunktionen för att implementera ritning för ett ägarritningsobjekt CComboBox . Innan den här medlemsfunktionen avslutas ska programmet återställa alla GDI-objekt (grafikenhetsgränssnitt) som valts för visningskontexten som anges i lpDrawItemStruct.

Example

// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example draws an item's text centered vertically and horizontally. The
// combo box control was created with the following code:
//   pmyComboBox->Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      CBS_SORT|CBS_OWNERDRAWVARIABLE,
//      myRect, pParentWnd, 1);
//
void CMyComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
   ASSERT(lpDrawItemStruct->CtlType == ODT_COMBOBOX);
   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. Erase
   // the 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);
   }

   // 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();
}

CComboBox::FindString

Söker efter, men väljer inte, den första strängen som innehåller det angivna prefixet i listrutan i en kombinationsruta.

int FindString(
    int nStartAfter,
    LPCTSTR lpszString) const;

Parameters

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 -1 genomsöks hela listrutan från början.

lpszString
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.

Return Value

Om returvärdet är större än eller lika med 0 är det det matchande objektets nollbaserade index. Det är CB_ERR om sökningen misslyckades.

Remarks

Den här funktionen stöds inte av Windows-kontrollen ComboBoxEx . Mer information om den här kontrollen ComboBoxEx finns i Kontroller i Windows SDK.

Example

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

// Delete all items that begin with the specified string.
int nItem = 0;
while ((nItem = m_pComboBox->FindString(nItem, lpszmyString)) != CB_ERR)
{
   m_pComboBox->DeleteString(nItem);
}

CComboBox::FindStringExact

FindStringExact Anropa medlemsfunktionen för att hitta den första listrutesträngen (i en kombinationsruta) som matchar strängen som anges i lpszFind.

int FindStringExact(
    int nIndexStart,
    LPCTSTR lpszFind) const;

Parameters

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å den här strängen kan innehålla valfri kombination av versaler och gemener.

Return Value

Det nollbaserade indexet för det matchande objektet eller CB_ERR om sökningen misslyckades.

Remarks

Om kombinationsrutan skapades med ett ägardragningsformat men utan CBS_HASSTRINGS formatmallen FindStringExact försöker du matcha dubbelordsvärdet mot värdet lpszFind.

Example

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

// Delete all items that exactly match the specified string.
int nDex = 0;
while ((nDex = m_pComboBox->FindStringExact(nDex, lpszmyExactString)) != CB_ERR)
{
   m_pComboBox->DeleteString(nDex);
}

CComboBox::GetComboBoxInfo

Hämtar information för CComboBox objektet.

BOOL GetComboBoxInfo(PCOMBOBOXINFO pcbi) const;

Parameters

pcbi
En pekare till COMBOBOXINFO strukturen.

Return Value

Returnerar TRUE vid lyckat fel FALSE .

Remarks

Den här medlemsfunktionen emulerar funktionen i CB_GETCOMBOBOXINFO meddelandet enligt beskrivningen i Windows SDK.

CComboBox::GetCount

Anropa den här medlemsfunktionen för att hämta antalet objekt i listrutan i en kombinationsruta.

int GetCount() const;

Return Value

Antalet objekt. Det returnerade antalet är ett större än indexvärdet för det sista objektet (indexet är nollbaserat). Det är CB_ERR om ett fel inträffar.

Example

// Add 10 items to the combo box.
CString strItem;
for (int i = 0; i < 10; i++)
{
   strItem.Format(_T("item %d"), i);
   m_pComboBox->AddString(strItem);
}

// Verify the 10 items were added to the combo box.
ASSERT(m_pComboBox->GetCount() == 10);

CComboBox::GetCueBanner

Hämtar den kötext som visas för en kombinationsrutekontroll.

CString GetCueBanner() const;

BOOL GetCueBanner(
    LPTSTR lpszText,
    int cchText) const;

Parameters

lpszText
[ut] Pekare till en buffert som tar emot banderollstexten.

cchText
[i] Storleken på bufferten som parametern pekar på lpszText .

Return Value

I den första överlagringen, ett CString objekt som innehåller text för referensbanderollen om det finns, annars ett CString objekt som har noll längd.

-or-

I den andra överlagringen, TRUE om den här metoden lyckas, annars . FALSE

Remarks

Cue-text är en uppmaning som visas i indataområdet i kombinationsrutekontrollen. Referenstexten visas tills användaren tillhandahåller indata.

Den här metoden skickar meddelandet CB_GETCUEBANNER , som beskrivs i Windows SDK.

CComboBox::GetCurSel

Anropa den här medlemsfunktionen för att avgöra vilket objekt i kombinationsrutan som är markerat.

int GetCurSel() const;

Return Value

Det nollbaserade indexet för det markerade objektet i listrutan i en kombinationsruta, eller CB_ERR om inget objekt har valts.

Remarks

GetCurSel returnerar ett index till listan.

Example

// Select the next item of the currently selected item
// in the combo box.
int nIndex = m_pComboBox->GetCurSel();
int nCount = m_pComboBox->GetCount();
if ((nIndex != CB_ERR) && (nCount > 1))
{
   if (++nIndex < nCount)
      m_pComboBox->SetCurSel(nIndex);
   else
      m_pComboBox->SetCurSel(0);
}

CComboBox::GetDroppedControlRect

GetDroppedControlRect Anropa medlemsfunktionen för att hämta skärmkoordinaterna för listrutan synlig (nedrullningsad) i en listruta.

void GetDroppedControlRect(LPRECT lprect) const;

Parameters

lprect
Pekar på den RECT-struktur som ska ta emot koordinaterna.

Example

// This example move a combo box so that the upper left
// corner of the combo box is at a specific point.

// The point to move the combo box to.
CPoint myPoint(30, 10);

CRect r;

m_pComboBox->GetDroppedControlRect(&r);

m_pComboBox->GetParent()->ScreenToClient(&r);
r.OffsetRect(myPoint - r.TopLeft());
m_pComboBox->MoveWindow(&r);

CComboBox::GetDroppedState

GetDroppedState Anropa medlemsfunktionen för att avgöra om listrutan i en listruta är synlig (nedrullningsad).

BOOL GetDroppedState() const;

Return Value

Nonzero om listrutan är synlig; annars 0.

Example

// Show the dropdown list box if it is not already dropped.
if (!m_pComboBox->GetDroppedState())
   m_pComboBox->ShowDropDown(TRUE);

CComboBox::GetDroppedWidth

Anropa den här funktionen för att hämta den minsta tillåtna bredden, i bildpunkter, för listrutan i en kombinationsruta.

int GetDroppedWidth() const;

Return Value

Om det lyckas, den minsta tillåtna bredden, i bildpunkter; annars . CB_ERR

Remarks

Den här funktionen gäller endast kombinationsrutor med formatmallen CBS_DROPDOWN eller CBS_DROPDOWNLIST .

Som standard är listrutans minsta tillåtna bredd 0. Den minsta tillåtna bredden kan anges genom att anropa SetDroppedWidth. När listrutans del av kombinationsrutan visas är dess bredd den större av den minsta tillåtna bredden eller kombinationsrutans bredd.

Example

Se exemplet för SetDroppedWidth.

CComboBox::GetEditSel

Hämtar start- och slutteckenpositionerna för den aktuella markeringen i redigeringskontrollen för en kombinationsruta.

DWORD GetEditSel() const;

Return Value

Ett 32-bitarsvärde som innehåller startpositionen i det låga ordet och positionen för det första icke-markerade tecknet efter slutet av markeringen i högordningsordet. Om den här funktionen används i en kombinationsruta utan redigeringskontroll CB_ERR returneras.

Example

DWORD dwSel;

// Set the selection to be all characters after the current selection.
if ((dwSel = m_MyComboBox.GetEditSel()) != CB_ERR)
{
   m_MyComboBox.SetEditSel(HIWORD(dwSel), -1);
}

CComboBox::GetExtendedUI

GetExtendedUI Anropa medlemsfunktionen för att avgöra om en kombinationsruta har standardanvändargränssnittet eller det utökade användargränssnittet.

BOOL GetExtendedUI() const;

Return Value

Nonzero om kombinationsrutan har det utökade användargränssnittet. annars 0.

Remarks

Det utökade användargränssnittet kan identifieras på följande sätt:

  • Om du klickar på den statiska kontrollen visas endast listrutan för kombinationsrutor med CBS_DROPDOWNLIST formatet .

  • Om du trycker på nedåtpilen visas listrutan (F4 är inaktiverad).

Rullning i den statiska kontrollen inaktiveras när objektlistan inte visas (piltangenterna är inaktiverade).

Example

// Use the extended UI if it is not already set.
if (!m_pComboBox->GetExtendedUI())
   m_pComboBox->SetExtendedUI(TRUE);

CComboBox::GetHorizontalExtent

Hämtar bredden i bildpunkter från kombinationsrutan med vilken listrutans del av kombinationsrutan kan rullas vågrätt.

UINT GetHorizontalExtent() const;

Return Value

Den rullningsbara bredden på listrutan i kombinationsrutan i bildpunkter.

Remarks

Detta gäller endast om listrutedelen i kombinationsrutan har en vågrät rullningslist.

Example

// Find the longest string in the combo box.
CString strText;
CSize sz;
UINT dxText = 0;
CDC *pDCCombo = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
   m_pComboBox->GetLBText(i, strText);
   sz = pDCCombo->GetTextExtent(strText);

   if (sz.cx > (LONG)dxText)
      dxText = sz.cx;
}
m_pComboBox->ReleaseDC(pDCCombo);

// Set the horizontal extent only if the current extent is not large enough.
if (m_pComboBox->GetHorizontalExtent() < dxText)
{
   m_pComboBox->SetHorizontalExtent(dxText);
   ASSERT(m_pComboBox->GetHorizontalExtent() == dxText);
}

CComboBox::GetItemData

Hämtar det 32-bitarsvärde som medföljer programmet som är associerat med det angivna kombinationsrutan.

DWORD_PTR GetItemData(int nIndex) const;

Parameters

nIndex
Innehåller det nollbaserade indexet för ett objekt i kombinationsrutans listruta.

Return Value

Det 32-bitars värde som är associerat med objektet eller CB_ERR om ett fel inträffar.

Remarks

32-bitarsvärdet kan anges med parametern dwItemData för ett SetItemData medlemsfunktionsanrop. GetItemDataPtr Använd medlemsfunktionen om 32-bitarsvärdet som ska hämtas är en pekare (void*).

Example

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

CComboBox::GetItemDataPtr

Hämtar det angivna 32-bitarsvärdet som är associerat med det angivna kombinationsrutans objekt som pekare (void*).

void* GetItemDataPtr(int nIndex) const;

Parameters

nIndex
Innehåller det nollbaserade indexet för ett objekt i kombinationsrutans listruta.

Return Value

Hämtar en pekare eller -1 om ett fel inträffar.

Example

LPVOID lpmyPtr = m_pComboBox->GetItemDataPtr(5);

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

CComboBox::GetItemHeight

GetItemHeight Anropa medlemsfunktionen för att hämta höjden på listobjekt i en kombinationsruta.

int GetItemHeight(int nIndex) const;

Parameters

nIndex
Anger komponenten i kombinationsrutan vars höjd ska hämtas. Om parametern nIndex är -1 hämtas höjden på redigeringskontrolldelen (eller statisk text) i kombinationsrutan. Om kombinationsrutan har CBS_OWNERDRAWVARIABLE formatet nIndex anger du det nollbaserade indexet för listobjektet vars höjd ska hämtas. Annars nIndex bör anges till 0.

Return Value

Höjden i bildpunkter för det angivna objektet i en kombinationsruta. Returvärdet är CB_ERR om ett fel inträffar.

Example

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

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

CComboBox::GetLBText

Hämtar en sträng från listrutan i en kombinationsruta.

int GetLBText(
    int nIndex,
    LPTSTR lpszText) const;

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

Parameters

nIndex
Innehåller det nollbaserade indexet för listrutesträngen som ska kopieras.

lpszText
Pekar på en buffert som ska ta emot strängen. Bufferten måste ha tillräckligt med utrymme för strängen och ett avslutande null-tecken.

rString
En referens till en CString.

Return Value

Längden (i byte) på strängen, exklusive det avslutande null-tecknet. Om nIndex inte anger ett giltigt index är CB_ERRreturvärdet .

Remarks

Den andra formen av den här medlemsfunktionen fyller ett CString objekt med objektets text.
Om nIndex är ogiltigt utlöser den här funktionen ett E_INVALIDARG undantag (felkod: -2147024809, 0x80070057).

Example

// Dump all of the items in the combo box.
CString str1, str2;
int n;
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
   n = m_pComboBox->GetLBTextLen(i);
   m_pComboBox->GetLBText(i, str1.GetBuffer(n));
   str1.ReleaseBuffer();

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

CComboBox::GetLBTextLen

Hämtar längden på en sträng i listrutan i en kombinationsruta.

int GetLBTextLen(int nIndex) const;

Parameters

nIndex
Innehåller det nollbaserade indexet för listrutesträngen.

Return Value

Längden på strängen i byte, exklusive det avslutande null-tecknet. Om nIndex inte anger ett giltigt index är CB_ERRreturvärdet .

Example

Se exemplet för CComboBox::GetLBText.

CComboBox::GetLocale

Hämtar språkvarianten som används av kombinationsrutan.

LCID GetLocale() const;

Return Value

Värdet för språkidentifierare (LCID) för strängarna i kombinationsrutan.

Remarks

Språkvarianten används till exempel för att fastställa sorteringsordningen för strängarna i en sorterad kombinationsruta.

Example

Se exemplet för CComboBox::SetLocale.

CComboBox::GetMinVisible

Hämtar det minsta antalet synliga objekt i listrutan för den aktuella kombinationsrutekontrollen.

int GetMinVisible() const;

Return Value

Det minsta antalet synliga objekt i den aktuella listrutan.

Remarks

Den här metoden skickar meddelandet CB_GETMINVISIBLE , som beskrivs i Windows SDK.

CComboBox::GetTopIndex

Hämtar det nollbaserade indexet för det första synliga objektet i listrutan i kombinationsrutan.

int GetTopIndex() const;

Return Value

Det nollbaserade indexet för det första synliga objektet i listrutan i kombinationsrutan om det lyckas, CB_ERR annars.

Remarks

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 nTop = m_pComboBox->GetCount() / 2;
if (m_pComboBox->GetTopIndex() < nTop)
{
   m_pComboBox->SetTopIndex(nTop);
   ASSERT(m_pComboBox->GetTopIndex() == nTop);
}

CComboBox::InitStorage

Allokerar minne för lagring av listruteobjekt i listrutan i kombinationsrutan.

int InitStorage(
    int nItems,
    UINT nBytes);

Parameters

nItems
Anger antalet objekt som ska läggas till.

nBytes
Anger mängden minne i byte som ska allokeras för objektsträngar.

Return Value

Om det lyckas kan det maximala antalet objekt som listrutans del av kombinationsrutan lagra innan en minnesomfördelning behövs, annars CB_ERRSPACEinnebär det att det inte finns tillräckligt med minne.

Remarks

Anropa den här funktionen innan du lägger till ett stort antal objekt i listrutan i CComboBox.

Endast Windows 95/98: Parametern wParam ä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.

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 tar kortast möjliga tid. Du kan använda uppskattningar för parametrarna. Om du överskattar allokeras lite extra minne. Om du underskattar används den normala allokeringen för objekt som överskrider det förallokerade beloppet.

Example

// Initialize the storage of the combo box to be 256 strings with
// about 10 characters per string, performance improvement.
int nAlloc = pmyComboBox->InitStorage(256, 10);
ASSERT(nAlloc != CB_ERRSPACE);

// Add 256 items to the combo box.
CString strAdd;
for (int i = 0; i < 256; i++)
{
   strAdd.Format(_T("item string %d"), i);
   m_pComboBox->AddString(strAdd);
}

CComboBox::InsertString

Infogar en sträng i listrutan i en kombinationsruta.

int InsertString(
    int nIndex,
    LPCTSTR lpszString);

Parameters

nIndex
Innehåller det nollbaserade indexet till positionen i listrutan som ska ta emot strängen. Om den här parametern är -1 läggs strängen till i slutet av listan.

lpszString
Pekar på den null-avslutade sträng som ska infogas.

Return Value

Det nollbaserade indexet för den position där strängen infogades. Returvärdet är CB_ERR om ett fel inträffar. Returvärdet är CB_ERRSPACE om det inte finns tillräckligt med utrymme för att lagra den nya strängen.

Remarks

AddString Till skillnad från medlemsfunktionen InsertString leder medlemsfunktionen inte till att en lista med CBS_SORT formatet sorteras.

Note

Den här funktionen stöds inte av Windows-kontrollen ComboBoxEx . Mer information om den här kontrollen ComboBoxEx finns i Kontroller i Windows SDK.

Example

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

CComboBox::LimitText

Begränsar längden i byte av texten som användaren kan ange i redigeringskontrollen för en kombinationsruta.

BOOL LimitText(int nMaxChars);

Parameters

nMaxChars
Anger längden (i byte) på texten som användaren kan ange. Om den här parametern är 0 anges textlängden till 65 535 byte.

Return Value

Nonzero om det lyckas. Om det anropas för en kombinationsruta med formatmallen CBS_DROPDOWNLIST eller för en kombinationsruta utan redigeringskontroll är CB_ERRreturvärdet .

Remarks

Om kombinationsrutan inte har formatet CBS_AUTOHSCROLLkommer det inte att ha någon effekt att ange textgränsen som större än storleken på redigeringskontrollen.

LimitText begränsar endast den text som användaren kan ange. Det påverkar inte all text som redan finns i redigeringskontrollen när meddelandet skickas, och det påverkar inte heller längden på texten som kopieras till redigeringskontrollen när en sträng i listrutan är markerad.

Example

// Limit the number of characters in the combo box's edit control to
// be the maximum number visible.

// Get the text metrics for the combo box; needed for the
// average character width.
TEXTMETRIC tm;
CDC *pDCCB = m_pComboBox->GetDC();
pDCCB->GetTextMetrics(&tm);
m_pComboBox->ReleaseDC(pDCCB);

CRect rect;
m_pComboBox->GetClientRect(&rect);

m_pComboBox->LimitText(rect.Width() / tm.tmAveCharWidth);

CComboBox::MeasureItem

Anropas av ramverket när en kombinationsruta med ett ägardragningsformat skapas.

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

Parameters

lpMeasureItemStruct
En lång pekare till en MEASUREITEMSTRUCT struktur.

Remarks

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 måtten på listrutan i kombinationsrutan. Om kombinationsrutan skapas med CBS_OWNERDRAWVARIABLE formatet anropar ramverket den här medlemsfunktionen för varje objekt i listrutan. Annars anropas den här medlemmen bara en gång.

CBS_OWNERDRAWFIXED Att använda formatet i en kombinationsruta för ägardragning som skapats med SubclassDlgItem medlemsfunktionen CWnd i innebär ytterligare programmeringsöverväganden. Se diskussionen i Technical Note 14.

Se CWnd::OnMeasureItem en beskrivning av MEASUREITEMSTRUCT strukturen.

Example

// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example measures an item and sets the height of the item to twice the
// vertical extent of its text. The combo box control was created with
// the following code:
//   pmyComboBox->Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      CBS_SORT|CBS_OWNERDRAWVARIABLE,
//      myRect, pParentWnd, 1);
//
void CMyComboBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
   ASSERT(lpMeasureItemStruct->CtlType == ODT_COMBOBOX);

   if (lpMeasureItemStruct->itemID != (UINT)-1)
   {
      LPCTSTR lpszText = (LPCTSTR)lpMeasureItemStruct->itemData;
      ASSERT(lpszText != NULL);
      CSize sz;
      CDC *pDC = GetDC();

      sz = pDC->GetTextExtent(lpszText);

      ReleaseDC(pDC);

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

CComboBox::Paste

Infogar data från Urklipp i redigeringskontrollen för kombinationsrutan vid den aktuella markörens position.

void Paste();

Remarks

Data infogas endast om Urklipp innehåller data i CF_TEXT format.

Example

// Replace all of the text in the combo box's edit control with the text
// in the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Paste();

CComboBox::ResetContent

Tar bort alla objekt från listrutan och redigerar kontrollen för en kombinationsruta.

void ResetContent();

Example

// Delete all the items from the combo box.
m_pComboBox->ResetContent();
ASSERT(m_pComboBox->GetCount() == 0);

CComboBox::SelectString

Söker efter en sträng i listrutan i en kombinationsruta, och om strängen hittas väljer du strängen i listrutan och kopierar den till redigeringskontrollen.

int SelectString(
    int nStartAfter,
    LPCTSTR lpszString);

Parameters

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 -1 genomsöks hela listrutan från början.

lpszString
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.

Return Value

Det nollbaserade indexet för det markerade objektet om strängen hittades. Om sökningen misslyckades är CB_ERR returvärdet och den aktuella markeringen ändras inte.

Remarks

En sträng markeras endast om dess inledande tecken (från startpunkten) matchar tecknen i prefixsträngen.

Observera att medlemsfunktionerna SelectString och FindString både hittar en sträng, men SelectString medlemsfunktionen väljer även strängen.

Example

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

// Select the item that begins with the specified string.
int nSel = m_pComboBox->SelectString(0, lpszSelect);
ASSERT(nSel != CB_ERR);

CComboBox::SetCueBanner

Anger den kötext som visas för en kombinationsrutekontroll.

BOOL SetCueBanner(LPCTSTR lpszText);

Parameters

lpszText
[i] Pekare till en null-avslutad buffert som innehåller referenstexten.

Return Value

TRUEom metoden lyckas. annars . FALSE

Remarks

Cue-text är en uppmaning som visas i indataområdet i kombinationsrutekontrollen. Referenstexten visas tills användaren tillhandahåller indata.

Den här metoden skickar meddelandet CB_SETCUEBANNER , som beskrivs i Windows SDK.

Example

Det första kodexemplet definierar variabeln , m_comboboxsom används för att programmatiskt komma åt kombinationsrutekontrollen. Den här variabeln används i nästa exempel.

// Variable to access the combo box control
CComboBox m_combobox;

I nästa kodexempel anges signalbanderollen för kombinationsrutekontrollen.

// Add extra initialization here.

// Add 20 items to the combo box. The Resource Editor
// has already been used to set the style of the combo
// box to CBS_SORT.
CString str;
for (int i = 1; i <= 20; i++)
{
    str.Format(_T("Item %2d"), i);
    m_combobox.AddString(str);
}
// Set the minimum visible item
m_combobox.SetMinVisibleItems(10);
// Set the cue banner
m_combobox.SetCueBanner(_T("Select an item..."));

// End of extra initialization.

CComboBox::SetCurSel

Väljer en sträng i listrutan i en kombinationsruta.

int SetCurSel(int nSelect);

Parameters

nSelect
Anger det nollbaserade indexet för strängen som ska väljas. Om -1 tas alla aktuella val i listrutan bort och redigeringskontrollen avmarkeras.

Return Value

Det nollbaserade indexet för det markerade objektet om meddelandet lyckas. Returvärdet är CB_ERR om nSelect är större än antalet objekt i listan eller om nSelect är inställt på -1, vilket rensar markeringen.

Remarks

Om det behövs rullar listrutan strängen i vyn (om listrutan är synlig). Texten i redigeringskontrollen för kombinationsrutan ändras så att den återspeglar den nya markeringen. Alla tidigare val i listrutan tas bort.

Example

// Select the last item in the combo box.
int nLast = pmyComboBox->GetCount() - 1;
if (nLast >= 0)
   m_pComboBox->SetCurSel(nLast);

CComboBox::SetDroppedWidth

Anropa den här funktionen för att ange den minsta tillåtna bredden i bildpunkter för listrutan i en kombinationsruta.

int SetDroppedWidth(UINT nWidth);

Parameters

nWidth
Den minsta tillåtna bredden för listrutan i kombinationsrutan, i bildpunkter.

Return Value

Om det lyckas, den nya bredden på listrutan, annars CB_ERR.

Remarks

Den här funktionen gäller endast kombinationsrutor med formatmallen CBS_DROPDOWN eller CBS_DROPDOWNLIST .

Som standard är listrutans minsta tillåtna bredd 0. När listrutans del av kombinationsrutan visas är dess bredd den större av den minsta tillåtna bredden eller kombinationsrutans bredd.

Example

// Find the longest string in the combo box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_pComboBox->GetDC();
CFont *pFont = m_pComboBox->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_pComboBox->GetCount(); i++)
{
   m_pComboBox->GetLBText(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_pComboBox->ReleaseDC(pDC);

// Adjust the width for the vertical scroll bar and the left and right border.
dx += ::GetSystemMetrics(SM_CXVSCROLL) + 2 * ::GetSystemMetrics(SM_CXEDGE);

// Set the width of the list box so that every item is completely visible.
m_pComboBox->SetDroppedWidth(dx);

CComboBox::SetEditSel

Markerar tecken i redigeringskontrollen för en kombinationsruta.

BOOL SetEditSel(
    int nStartChar,
    int nEndChar);

Parameters

nStartChar
Anger startpositionen. Om startpositionen är inställd på -1 tas alla befintliga val bort.

nEndChar
Anger slutpositionen. Om slutpositionen är inställd på -1 markeras all text från startpositionen till det sista tecknet i redigeringskontrollen.

Return Value

Nonzero om medlemsfunktionen lyckas; annars 0. Det är CB_ERR om CComboBox har CBS_DROPDOWNLIST formatet eller inte har en listruta.

Remarks

Positionerna är nollbaserade. Om du vill välja det första tecknet i redigeringskontrollen anger du en startposition på 0. Slutpositionen är att tecknet precis efter det sista tecknet ska väljas. Om du till exempel vill välja de första fyra tecknen i redigeringskontrollen använder du en startposition på 0 och en slutposition på 4.

Note

Den här funktionen stöds inte av Windows-kontrollen ComboBoxEx . Mer information om den här kontrollen ComboBoxEx finns i Kontroller i Windows SDK.

Example

Se exemplet för CComboBox::GetEditSel.

CComboBox::SetExtendedUI

SetExtendedUI Anropa medlemsfunktionen för att välja antingen standardanvändargränssnittet eller det utökade användargränssnittet för en kombinationsruta som har formatmallen CBS_DROPDOWN eller CBS_DROPDOWNLIST .

int SetExtendedUI(BOOL bExtended = TRUE);

Parameters

bExtended
Anger om kombinationsrutan ska använda det utökade användargränssnittet eller standardanvändargränssnittet. Ett värde för TRUE väljer det utökade användargränssnittet. Ett värde FALSE för väljer standardanvändargränssnittet.

Return Value

CB_OKAY om åtgärden lyckas eller CB_ERR om ett fel inträffar.

Remarks

Det utökade användargränssnittet kan identifieras på följande sätt:

  • Om du klickar på den statiska kontrollen visas endast listrutan för kombinationsrutor med CBS_DROPDOWNLIST formatet .

  • Om du trycker på nedåtpilen visas listrutan (F4 är inaktiverad).

Rullning i den statiska kontrollen inaktiveras när objektlistan inte visas (piltangenterna är inaktiverade).

Example

Se exemplet för CComboBox::GetExtendedUI.

CComboBox::SetHorizontalExtent

Anger bredden i bildpunkter med vilken listrutans del av kombinationsrutan kan rullas vågrätt.

void SetHorizontalExtent(UINT nExtent);

Parameters

nExtent
Anger hur många bildpunkter som listrutans del av kombinationsrutan kan rullas vågrätt med.

Remarks

Om listrutans bredd är mindre än det här värdet kommer den vågräta rullningslisten att rulla objekt vågrätt i listrutan. Om listrutans bredd är lika med eller större än det här värdet är den vågräta rullningslisten dold eller, om kombinationsrutan har CBS_DISABLENOSCROLL formatet inaktiverat.

Example

// Find the longest string in the combo box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_pComboBox->GetDC();
CFont *pFont = m_pComboBox->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_pComboBox->GetCount(); i++)
{
   m_pComboBox->GetLBText(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_pComboBox->ReleaseDC(pDC);

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

CComboBox::SetItemData

Anger det 32-bitarsvärde som är associerat med det angivna objektet i en kombinationsruta.

int SetItemData(
    int nIndex,
    DWORD_PTR dwItemData);

Parameters

nIndex
Innehåller ett nollbaserat index till det objekt som ska anges.

dwItemData
Innehåller det nya värdet som ska associeras med objektet.

Return Value

CB_ERR om ett fel inträffar.

Remarks

SetItemDataPtr Använd medlemsfunktionen om 32-bitarsobjektet ska vara en pekare.

Example

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

CComboBox::SetItemDataPtr

Anger det 32-bitarsvärde som är associerat med det angivna objektet i en kombinationsruta som den angivna pekaren (void*).

int SetItemDataPtr(
    int nIndex,
    void* pData);

Parameters

nIndex
Innehåller ett nollbaserat index för objektet.

pData
Innehåller pekaren som ska associeras med objektet.

Return Value

CB_ERR om ett fel inträffar.

Remarks

Den här pekaren är giltig under kombinationsrutans livslängd, även om objektets relativa position i kombinationsrutan 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_pComboBox->GetCount(); i++)
{
   m_pComboBox->SetItemDataPtr(i, NULL);
}

CComboBox::SetItemHeight

SetItemHeight Anropa medlemsfunktionen för att ange höjden på listobjekt i en kombinationsruta eller höjden på redigeringskontrolldelen (eller statisk text) i en kombinationsruta.

int SetItemHeight(
    int nIndex,
    UINT cyItemHeight);

Parameters

nIndex
Anger om höjden på listobjekt eller höjden på redigeringskontrolldelen (eller statisk text) i kombinationsrutan har angetts.

Om kombinationsrutan har CBS_OWNERDRAWVARIABLE formatet nIndex anger du det nollbaserade indexet för listobjektet vars höjd ska anges. Annars nIndex måste den vara 0 och höjden på alla listobjekt anges.

Om nIndex är -1 ska höjden på redigeringskontrollen eller statisk text i kombinationsrutan anges.

cyItemHeight
Anger höjden i bildpunkter för komponenten combo-box som identifieras av nIndex.

Return Value

CB_ERR om indexet eller höjden är ogiltigt; annars 0.

Remarks

Höjden på redigeringskontrolldelen (eller statisk text) i kombinationsrutan anges oberoende av listobjektens höjd. Ett program måste se till att längden på redigeringskontrolldelen (eller statisk text) inte är mindre än höjden på ett visst listruteobjekt.

Example

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

   m_pComboBox->SetItemHeight(i, sz.cy);
}
m_pComboBox->ReleaseDC(pDC);

CComboBox::SetLocale

Anger nationella identifierare för den här kombinationsrutan.

LCID SetLocale(LCID nNewLocale);

Parameters

nNewLocale
Det nya språkidentifierarvärdet (LCID) som ska anges för kombinationsrutan.

Return Value

Det tidigare värdet för språkidentifierare (LCID) för den här kombinationsrutan.

Remarks

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_pComboBox->SetLocale(mylcid);
ASSERT(m_pComboBox->GetLocale() == mylcid);

CComboBox::SetMinVisibleItems

Anger det minsta antalet synliga objekt i listrutan för den aktuella kombinationsrutekontrollen.

BOOL SetMinVisibleItems(int iMinVisible);

Parameters

iMinVisible
[i] Anger det minsta antalet synliga objekt.

Return Value

TRUE om den här metoden lyckas. annars FALSE.

Remarks

Den här metoden skickar meddelandet CB_SETMINVISIBLE , som beskrivs i Windows SDK.

Example

Det första kodexemplet definierar variabeln , m_comboboxsom används för att programmatiskt komma åt kombinationsrutekontrollen. Den här variabeln används i nästa exempel.

// Variable to access the combo box control
CComboBox m_combobox;

I nästa kodexempel infogas 20 objekt i listrutan för en kombinationsrutekontroll. Sedan anger den att minst 10 objekt ska visas när en användare trycker på listrutepilen.

// Add extra initialization here.

// Add 20 items to the combo box. The Resource Editor
// has already been used to set the style of the combo
// box to CBS_SORT.
CString str;
for (int i = 1; i <= 20; i++)
{
    str.Format(_T("Item %2d"), i);
    m_combobox.AddString(str);
}
// Set the minimum visible item
m_combobox.SetMinVisibleItems(10);
// Set the cue banner
m_combobox.SetCueBanner(_T("Select an item..."));

// End of extra initialization.

CComboBox::SetTopIndex

Ser till att ett visst objekt visas i listrutan i kombinationsrutan.

int SetTopIndex(int nIndex);

Parameters

nIndex
Anger det nollbaserade indexet för listruteobjektet.

Return Value

Noll om det lyckas eller CB_ERR om ett fel inträffar.

Remarks

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 combo box to be the middle item
m_pComboBox->SetTopIndex(m_pComboBox->GetCount() / 2);

CComboBox::ShowDropDown

Visar eller döljer listrutan i en kombinationsruta som har formatmallen CBS_DROPDOWN eller CBS_DROPDOWNLIST .

void ShowDropDown(BOOL bShowIt = TRUE);

Parameters

bShowIt
Anger om listrutan ska visas eller döljas. Ett värde för TRUE visar listrutan. FALSE Värdet döljer listrutan.

Remarks

Som standard visar en kombinationsruta med det här formatet listrutan.

Den här medlemsfunktionen har ingen effekt på en kombinationsruta som skapats CBS_SIMPLE med formatet .

Example

Se exemplet för CComboBox::GetDroppedState.

See also

Ctrlbar för MFC-exempel
CWnd klass
Hierarchy Chart
CWnd klass
CButton klass
CEdit klass
CListBox klass
CScrollBar klass
CStatic klass
CDialog klass