Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 harCBS_SIMPLEformatet .ON_CBN_DBLCLKAnvändaren dubbelklickar på en sträng i listrutan i en kombinationsruta. Det här meddelandemeddelandet skickas endast för en kombinationsruta medCBS_SIMPLEformatet . För en kombinationsruta med formatmallenCBS_DROPDOWNellerCBS_DROPDOWNLISTkan dubbelklicka inte inträffa eftersom ett enda klick döljer listrutan.ON_CBN_DROPDOWNListrutan i en kombinationsruta håller på att listrutan (visas). Det här meddelandemeddelandet kan endast ske för en kombinationsruta medCBS_DROPDOWNformatet ellerCBS_DROPDOWNLIST.ON_CBN_EDITCHANGEAnvändaren har vidtagit en åtgärd som kan ha ändrat texten i redigeringskontrolldelen i en kombinationsruta. Till skillnad från meddelandetCBN_EDITUPDATEskickas det här meddelandet när Windows har uppdaterat skärmen. Den skickas inte om kombinationsrutan harCBS_DROPDOWNLISTformatet .ON_CBN_EDITUPDATERedigeringskontrolldelen 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 harCBS_DROPDOWNLISTformatet .ON_CBN_ERRSPACEKombinationsrutan 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 innanCBN_CLOSEUPmeddelandemeddelandet anger att användarens val ska ignoreras. MeddelandetCBN_SELENDCANCELellerCBN_SELENDOKmeddelandet skickas även om aviseringsmeddelandetCBN_CLOSEUPinte skickas (som i fallet med en kombinationsruta medCBS_SIMPLEformatet).ON_CBN_SELENDOKAnvä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 meddelandetCBN_CLOSEUPanger att användarens val ska betraktas som giltigt. MeddelandetCBN_SELENDCANCELellerCBN_SELENDOKmeddelandet skickas även om aviseringsmeddelandetCBN_CLOSEUPinte skickas (som i fallet med en kombinationsruta medCBS_SIMPLEformatet).ON_CBN_KILLFOCUSKombinationsrutan förlorar indatafokuset.ON_CBN_SELCHANGEMarkeringen 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 viaGetLBTexteller en annan liknande funktion.GetWindowTextkan inte användas.ON_CBN_SETFOCUSKombinationsrutan 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
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_CHILDAlltidWS_VISIBLEVanligenWS_DISABLEDSällanWS_VSCROLLSå här lägger du till lodrät rullning för listrutan i kombinationsrutanWS_HSCROLLSå här lägger du till vågrät rullning för listrutan i kombinationsrutanWS_GROUPGruppera kontrollerWS_TABSTOPInkludera 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_READWRITEFilen kan läsas från eller skrivas till.DDL_READONLYFilen kan läsas från men inte skrivas till.DDL_HIDDENFilen är dold och visas inte i en kataloglista.DDL_SYSTEMFilen är en systemfil.DDL_DIRECTORYNamnet som anges avlpszWildCardanger en katalog.DDL_ARCHIVEFilen har arkiverats.DDL_DRIVESInkludera alla enheter som matchar namnet som anges avlpszWildCard.DDL_EXCLUSIVEExklusiv 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_DROPDOWNLISTformatet .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_DROPDOWNLISTformatet .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