共用方式為


CComboBox 類別

提供 Windows 下拉式方塊的功能。

語法

class CComboBox : public CWnd

成員

公用建構函式

名稱 描述
CComboBox::CComboBox 建構 CComboBox 物件。

公用方法

名稱 描述
CComboBox::AddString 將字串新增至下拉式方塊清單方塊清單方塊的結尾,或在具有 CBS_SORT 樣式的清單方塊排序位置。
CComboBox::Clear 在編輯控制項中刪除目前選取範圍,如果有的話。
CComboBox::CompareItem 由架構呼叫,以判斷新清單專案在已排序的擁有者繪製下拉式方塊中的相對位置。
CComboBox::Copy 以格式將目前選取範圍複製到剪貼簿 CF_TEXT
CComboBox::Create 建立下拉式方塊,並將它附加至 CComboBox 物件。
CComboBox::Cut 刪除目前選取範圍,如果有的話,在編輯控制項中刪除已刪除的文字,並以格式將已刪除的文字複製到剪貼簿 CF_TEXT
CComboBox::DeleteItem 從擁有者繪製的下拉式方塊中刪除清單專案時,由架構呼叫。
CComboBox::DeleteString 從下拉式方塊的清單方塊中刪除字串。
CComboBox::Dir 將檔案名清單新增至下拉式方塊的清單方塊。
CComboBox::DrawItem 當擁有者繪製下拉式方塊的視覺層面變更時,由架構呼叫。
CComboBox::FindString 尋找第一個字串,其中包含下拉式方塊清單方塊中的指定前置詞。
CComboBox::FindStringExact 尋找符合指定字串的第一個清單方塊字串(在下拉式方塊中)。
CComboBox::GetComboBoxInfo 擷取 物件的相關資訊 CComboBox
CComboBox::GetCount 擷取下拉式方塊清單方塊中的專案數。
CComboBox::GetCueBanner 取得下拉式方塊控制項所顯示的提示文字。
CComboBox::GetCurSel 在下拉式方塊的清單方塊中,擷取目前選取專案的索引,如果有的話。
CComboBox::GetDroppedControlRect 擷取下拉式下拉式方塊之可見(下拉式清單)清單方塊的螢幕座標。
CComboBox::GetDroppedState 判斷下拉式下拉式方塊的清單方塊是否可見(下拉式清單)。
CComboBox::GetDroppedWidth 擷取下拉式方塊下拉式清單方塊部分的最小允許寬度。
CComboBox::GetEditSel 取得下拉式方塊編輯控制項中目前選取範圍的開始和結束字元位置。
CComboBox::GetExtendedUI 判斷下拉式方塊是否具有預設使用者介面或擴充使用者介面。
CComboBox::GetHorizontalExtent 傳回下拉式方塊清單方塊部分可以水準捲動的圖元寬度。
CComboBox::GetItemData 擷取與指定下拉式方塊專案相關聯的應用程式提供 32 位值。
CComboBox::GetItemDataPtr 擷取與指定下拉式方塊專案相關聯的應用程式提供的 32 位指標。
CComboBox::GetItemHeight 擷取下拉式方塊中清單專案的高度。
CComboBox::GetLBText 從下拉式方塊的清單方塊取得字串。
CComboBox::GetLBTextLen 取得下拉式方塊清單方塊中字串的長度。
CComboBox::GetLocale 擷取下拉式方塊的地區設定識別碼。
CComboBox::GetMinVisible 取得目前下拉式方塊下拉式清單中的可見專案數目下限。
CComboBox::GetTopIndex 傳回下拉式方塊清單方塊中第一個可見專案的索引。
CComboBox::InitStorage 預先配置下拉式方塊清單方塊中專案和字串的記憶體區塊。
CComboBox::InsertString 將字串插入下拉式方塊的清單方塊中。
CComboBox::LimitText 限制使用者可以在下拉式方塊的編輯控制項中輸入的文字長度。
CComboBox::MeasureItem 由架構呼叫,以在建立擁有者繪製下拉式方塊時判斷下拉式方塊維度。
CComboBox::Paste 將資料從剪貼簿插入目前游標位置的編輯控制項。 只有在剪貼簿包含格式的資料時,才會插入資料 CF_TEXT
CComboBox::ResetContent 從清單方塊移除所有專案,並編輯下拉式方塊的控制項。
CComboBox::SelectString 在下拉式方塊的清單方塊中搜尋字串,如果找到字串,請選取清單方塊中的字串,並將字串複製到編輯控制項。
CComboBox::SetCueBanner 設定下拉式方塊控制項顯示的提示文字。
CComboBox::SetCurSel 在下拉式方塊的清單方塊中選取字串。
CComboBox::SetDroppedWidth 設定下拉式方塊下拉式清單方塊部分的最小允許寬度。
CComboBox::SetEditSel 在下拉式方塊的編輯控制項中選取字元。
CComboBox::SetExtendedUI 針對具有 CBS_DROPDOWNCBS_DROPDOWNLIST 樣式的下拉式方塊,選取預設使用者介面或擴充的使用者介面。
CComboBox::SetHorizontalExtent 設定下拉式方塊清單方塊部分可以水準捲動的圖元寬度。
CComboBox::SetItemData 設定下拉式方塊中與指定專案相關聯的 32 位值。
CComboBox::SetItemDataPtr 設定下拉式方塊中與指定專案相關聯的 32 位指標。
CComboBox::SetItemHeight 設定下拉式方塊中清單專案的高度,或下拉式方塊之編輯控制項(或靜態文字)部分的高度。
CComboBox::SetLocale 設定下拉式方塊的地區設定識別碼。
CComboBox::SetMinVisibleItems 設定目前下拉式方塊下拉式清單中的可見專案數目下限。
CComboBox::SetTopIndex 告知下拉式方塊的清單方塊部分,以顯示位於頂端具有指定索引的專案。
CComboBox::ShowDropDown 顯示或隱藏具有 CBS_DROPDOWNCBS_DROPDOWNLIST 樣式之下拉式方塊的清單方塊。

備註

下拉式方塊包含與靜態控制項或編輯控制項結合的清單方塊。 控制項的清單方塊部分可能隨時顯示,或只有在使用者選取控制項旁邊的下拉箭號時,才會顯示。

清單方塊中目前選取的專案(如果有的話)會顯示在靜態或編輯控制項中。 此外,如果下拉式方塊具有下拉式清單樣式,使用者可以在清單中輸入其中一個專案的初始字元,如果可見,清單方塊將會反白顯示下一個具有該初始字元的專案。

下表比較三個下拉式方塊 樣式

樣式 何時顯示清單方塊 靜態或編輯控制項
簡單 永遠 編輯
下拉式清單 卸載時 編輯
下拉式清單 卸載時 靜態

您可以從對話方塊範本或直接在程式碼中建立 CComboBox 物件。 在這兩種情況下,先呼叫建構函式 CComboBox 來建構 CComboBox 物件;然後呼叫 Create 成員函式來建立控制項,並將它附加至 CComboBox 物件。

如果您想要處理由下拉式方區塊轉送至其父系的 Windows 通知訊息(通常是衍生自 CDialog 的類別),請將訊息對應專案和訊息處理常式成員函式新增至每個訊息的父類別。

每個訊息對應專案採用下列格式:

ON_Notification( id, memberFxn )

其中 id 指定下拉式方塊控制項傳送通知的子視窗識別碼,而 memberFxn 是您寫入以處理通知的父成員函式名稱。

父系的函式原型如下所示:

afx_msg void memberFxn( );

無法預測傳送特定通知的順序。 特別是, CBN_SELCHANGE 通知可能會在通知之前或之後 CBN_CLOSEUP 發生。

潛在的訊息對應專案如下:

  • ON_CBN_CLOSEUP (Windows 3.1 和更新版本。下拉式方塊的清單方塊已關閉。 此通知訊息不會針對具有樣式的 CBS_SIMPLE 下拉式方區塊轉送。

  • ON_CBN_DBLCLK 使用者按兩下下拉式方塊清單方塊中的字串。 此通知訊息只會針對具有 樣式的 CBS_SIMPLE 下拉式方區塊轉送。 對於具有 CBS_DROPDOWNCBS_DROPDOWNLIST 樣式的下拉式方塊,因為按一下會隱藏清單方塊,所以無法進行按兩下。

  • ON_CBN_DROPDOWN 下拉式方塊的清單方塊即將下拉式清單方塊(可見)。 此通知訊息僅適用于具有 CBS_DROPDOWNCBS_DROPDOWNLIST 樣式的下拉式方塊。

  • ON_CBN_EDITCHANGE 使用者已採取動作,該動作可能會改變下拉式方塊之編輯控制項部分的文字。 不同于訊息 CBN_EDITUPDATE ,此訊息會在 Windows 更新畫面之後傳送。 如果下拉式方塊具有樣式, CBS_DROPDOWNLIST 則不會傳送它。

  • ON_CBN_EDITUPDATE 下拉式方塊的編輯控制項部分即將顯示改變的文字。 此通知訊息會在控制項格式化文字之後傳送,但在顯示文字之前。 如果下拉式方塊具有樣式, CBS_DROPDOWNLIST 則不會傳送它。

  • ON_CBN_ERRSPACE 下拉式方塊無法配置足夠的記憶體以符合特定要求。

  • ON_CBN_SELENDCANCEL (Windows 3.1 和更新版本。表示應該取消使用者的選取範圍。 使用者按一下專案,然後按一下另一個視窗或控制項來隱藏下拉式方塊的清單方塊。 此通知訊息會在通知訊息之前 CBN_CLOSEUP 傳送,指出應該忽略使用者的選取範圍。 CBN_SELENDCANCEL即使未傳送通知訊息,還是 CBN_CLOSEUP 會傳送或 CBN_SELENDOK 通知訊息(如同樣式 CBS_SIMPLE 為下拉式方塊的情況)。

  • ON_CBN_SELENDOK 使用者選取專案,然後按 ENTER 鍵,或按一下向下鍵來隱藏下拉式方塊的清單方塊。 此通知訊息會在訊息之前 CBN_CLOSEUP 傳送,指出使用者的選取範圍應該視為有效。 CBN_SELENDCANCEL即使未傳送通知訊息,還是 CBN_CLOSEUP 會傳送或 CBN_SELENDOK 通知訊息(如同樣式 CBS_SIMPLE 為下拉式方塊的情況)。

  • ON_CBN_KILLFOCUS 下拉式方塊正在失去輸入焦點。

  • ON_CBN_SELCHANGE 下拉式方塊清單方塊中的選取範圍即將變更,因為使用者按一下清單方塊,或使用方向鍵變更選取範圍。 處理此訊息時,下拉式方塊編輯控制項中的文字只能透過 GetLBText 或其他類似的函式來擷取。 GetWindowText 無法使用。

  • ON_CBN_SETFOCUS 下拉式方塊會接收輸入焦點。

如果您在對話方塊內建立 CComboBox 物件(透過對話方塊資源), CComboBox 當使用者關閉對話方塊時,就會自動終結物件。

如果您在另一個 CComboBox 視窗物件内嵌物件,就不需要終結它。 如果您在堆疊上建立 CComboBox 物件,它會自動終結。 如果您使用 函式在堆積 new 上建立 CComboBox 物件,您必須在物件上呼叫 delete ,在 Windows 下拉式方塊終結時終結它。

注意 如果您想要處理 WM_KEYDOWNWM_CHAR 訊息,您必須將下拉式方塊的編輯和清單方塊控制項子類別化、從 CEditCListBox 衍生類別衍生類別,並將這些訊息的處理常式新增至衍生類別。 如需詳細資訊,請參閱CWnd::SubclassWindow

繼承階層架構

CObject

CCmdTarget

CWnd

CComboBox

需求

標頭:afxwin.h

CComboBox::AddString

將字串加入下拉式方塊的清單方塊。

int AddString(LPCTSTR lpszString);

參數

lpszString
指向要加入的 Null 終止字串。

傳回值

如果傳回值大於或等於 0,則它是清單方塊中字串以零起始的索引。 如果發生錯誤,則傳回值 CB_ERR 是 ;如果空間不足而無法儲存新字串,則傳回值為 CB_ERRSPACE

備註

如果未使用 CBS_SORT 樣式建立清單方塊,字串就會新增至清單結尾。 否則,字串會插入清單中,並排序清單。

注意

Windows ComboBoxEx 控制項不支援此函式。 如需此控制項的詳細資訊,請參閱 ComboBoxEx Windows SDK 中的控制項

若要將字串插入清單中的特定位置,請使用 InsertString 成員函式。

範例

// 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

建構 CComboBox 物件。

CComboBox();

範例

// Declare a local CComboBox object.
CComboBox myComboBox;

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

CComboBox::Clear

在下拉式方塊的編輯控制項中,刪除目前選取範圍,如果有的話。

void Clear();

備註

若要刪除目前的選取範圍,並將已刪除的內容放在剪貼簿上,請使用 Cut 成員函式。

範例

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

CComboBox::CompareItem

由架構呼叫,以判斷新專案在排序的擁有者繪製下拉式方塊之清單方塊部分的相對位置。

virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);

參數

lpCompareItemStruct
結構的長指標 COMPAREITEMSTRUCT

傳回值

指出 結構中所描述之兩個專案的 COMPAREITEMSTRUCT 相對位置。 它可以是下列任何一個值:

意義
-1 專案 1 在專案 2 之前排序。
0 專案 1 和專案 2 會排序相同。
1 專案 1 在專案 2 之後排序。

如需 的描述, COMPAREITEMSTRUCT 請參閱 CWnd::OnCompareItem

備註

根據預設,此成員函式不會執行任何動作。 如果您使用樣式建立擁有者繪製下拉式方 LBS_SORT 塊,則必須覆寫此成員函式,以協助架構排序新增至清單方塊的新專案。

範例

// 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

將下拉式方塊編輯控制項中的目前選取範圍複製到 [剪貼簿 CF_TEXT ] 格式。

void Copy();

範例

// 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

建立下拉式方塊,並將它附加至 CComboBox 物件。

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

參數

dwStyle
指定下拉式方塊的樣式。 將下拉式方塊樣式 的任何組合 套用至方塊。

rect
指向下拉式方塊的位置和大小。 可以是 RECT 結構 CRect 物件。

pParentWnd
指定下拉式方塊的父視窗 (通常是 CDialog )。 它不得為 NULL

nID
指定下拉式方塊的控制識別碼。

傳回值

如果成功則為非零;否則為 0。

備註

您會在兩個步驟中建構 CComboBox 物件。 首先,呼叫 建構函式,然後呼叫 Create ,這會建立 Windows 下拉式方塊,並將它附加至 CComboBox 物件。

執行時 Create ,Windows 會將 WM_NCCREATEWM_CREATEWM_NCCALCSIZEWM_GETMINMAXINFO 訊息傳送至下拉式方塊。

基類中的 CWndOnNcCalcSizeOnCreateOnGetMinMaxInfo 成員函式預設 OnNcCreate 會處理這些訊息。 若要擴充預設訊息處理,請從 CComboBox 衍生類別、將訊息對應新增至新類別,並覆寫上述訊息處理常式成員函式。 例如,覆寫 OnCreate ,以執行新類別所需的初始化。

將下列 視窗樣式 套用至下拉式方塊控制項。 :

  • WS_CHILD 總是

  • WS_VISIBLE 通常

  • WS_DISABLED 很少

  • WS_VSCROLL 若要在下拉式方塊中新增清單方塊的垂直捲動

  • WS_HSCROLL 若要在下拉式方塊中新增清單方塊的水準捲動

  • WS_GROUP 將控制項分組

  • WS_TABSTOP 若要在定位順序中包含下拉式方塊

範例

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

CComboBox::Cut

刪除目前選取範圍,如果有的話,請在下拉式方塊編輯控制項中刪除已刪除的文字,並以格式將已刪除的文字複製到剪貼簿 CF_TEXT

void Cut();

備註

若要刪除目前的選取範圍,而不將已刪除的文字放在剪貼簿上,請呼叫 Clear 成員函式。

範例

// 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

當使用者從 owner-draw CComboBox 物件中刪除專案或終結下拉式方塊時,由架構呼叫。

virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);

參數

lpDeleteItemStruct
Windows DELETEITEMSTRUCT 結構的長指標,其中包含已刪除專案的相關資訊。 如需此結構的描述,請參閱 CWnd::OnDeleteItem

備註

此函式的預設實作不做任何動作。 覆寫此函式,視需要重新繪製下拉式方塊。

範例

// 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

從下拉式方塊中刪除位置 nIndex 的專案。

int DeleteString(UINT nIndex);

參數

nIndex
指定要刪除之字串的索引。

傳回值

如果傳回值大於或等於 0,則它是清單中剩餘的字串計數。 如果指定索引大於清單中的專案數目,則傳回值 CB_ERRnIndex 為 。

備註

之後 nIndex 的所有專案現在都會向下移動一個位置。 例如,如果下拉式方塊包含兩個專案,則刪除第一個專案會導致其餘專案現在處於第一個位置。 nIndex第一個位置之專案的 =0。

範例

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

CComboBox::Dir

將檔案名或磁片磁碟機清單新增至下拉式方塊的清單方塊。

int Dir(
    UINT attr,
    LPCTSTR lpszWildCard);

參數

attr
可以是 中所述 CFile::GetStatus 的任何值組合 enum ,或下列值的任何組合:

  • DDL_READWRITE 檔案可以讀取或寫入。

  • DDL_READONLY 檔案可以從 讀取,但無法寫入。

  • DDL_HIDDEN 檔案是隱藏的,而且不會出現在目錄清單中。

  • DDL_SYSTEM 檔案是系統檔案。

  • DDL_DIRECTORYlpszWildCard 指定的名稱會指定目錄。

  • DDL_ARCHIVE 檔案已封存。

  • DDL_DRIVES 包含符合 所 lpszWildCard 指定名稱的所有磁片磁碟機。

  • DDL_EXCLUSIVE 獨佔旗標。 如果已設定獨佔旗標,則只會列出指定類型的檔案。 否則,除了「一般」檔案之外,也會列出指定類型的檔案。

lpszWildCard
指向檔案規格字串。 字串可以包含萬用字元 (例如 , *.* )。

傳回值

如果傳回值大於或等於 0,則它是最後一個新增至清單之檔案名的以零起始的索引。 如果發生錯誤,則傳回值 CB_ERR 是 ;如果空間不足而無法儲存新的字串,則傳回值為 CB_ERRSPACE

備註

Windows ComboBoxEx 控制項不支援此函式。 如需此控制項的詳細資訊,請參閱 ComboBoxEx Windows SDK 中的控制項

範例

// 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

當擁有者繪製下拉式方塊的視覺層面變更時,由架構呼叫。

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

參數

lpDrawItemStruct
結構的指標 DRAWITEMSTRUCT ,其中包含所需繪圖類型的相關資訊。

備註

結構 itemAction 的成員 DRAWITEMSTRUCT 會定義要執行的繪圖動作。 如需此結構的描述,請參閱 CWnd::OnDrawItem

根據預設,此成員函式不會執行任何動作。 覆寫這個成員函式,以實作擁有者繪製物件的繪圖 CComboBox 。 在此成員函式終止之前,應用程式應該還原針對 中 lpDrawItemStruct 提供之顯示內容選取的所有圖形裝置介面 (GDI) 物件。

範例

// 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

尋找但未選取的第一個字串,其中包含下拉式方塊清單方塊中的指定前置詞。

int FindString(
    int nStartAfter,
    LPCTSTR lpszString) const;

參數

nStartAfter
包含專案以零起始的索引,再搜尋第一個專案。 當搜尋到達清單方塊底部時,它會從清單方塊的頂端繼續回到 所 nStartAfter 指定的專案。 如果為 -1,則會從頭搜尋整個清單方塊。

lpszString
指向包含要搜尋之前置詞的 Null 終止字串。 搜尋與大小寫無關,因此此字串可以包含大寫和小寫字母的任何組合。

傳回值

如果傳回值大於或等於 0,則為比對專案之以零起始的索引。 如果搜尋失敗,則為 CB_ERR

備註

Windows ComboBoxEx 控制項不支援此函式。 如需此控制項的詳細資訊,請參閱 ComboBoxEx Windows SDK 中的控制項

範例

// 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呼叫成員函式,以尋找符合 中所指定字串的第一個清單方塊字串(在下拉式方塊中 lpszFind )。

int FindStringExact(
    int nIndexStart,
    LPCTSTR lpszFind) const;

參數

nIndexStart
指定要在搜尋第一個專案之前,以零起始的專案索引。 當搜尋到達清單方塊底部時,它會從清單方塊的頂端繼續回到 所 nIndexStart 指定的專案。 如果 nIndexStart 為 -1,則會從頭搜尋整個清單方塊。

lpszFind
指向要搜尋的 Null 終止字串。 此字串可以包含完整的檔案名,包括副檔名。 搜尋不區分大小寫,因此此字串可以包含大寫和小寫字母的任何組合。

傳回值

比對專案之以零起始的索引,如果 CB_ERR 搜尋失敗,則為 。

備註

如果下拉式方塊是以擁有者繪製樣式建立,但沒有 CBS_HASSTRINGS 樣式, FindStringExact 則嘗試比對 lpszFind

範例

// 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

擷取 物件的資訊 CComboBox

BOOL GetComboBoxInfo(PCOMBOBOXINFO pcbi) const;

參數

*pcbi*<br/> A pointer to the [COMBOBOXINFO'](/windows/win32/api/winuser/ns-winuser-comboboxinfo) 結構。

傳回值

成功時傳回 TRUE,失敗時則傳回 FALSE

備註

此成員函式會模擬訊息的功能 CB_GETCOMBOBOXINFO ,如 Windows SDK 中所述。

CComboBox::GetCount

呼叫這個成員函式,以擷取下拉式方塊清單方塊中的專案數。

int GetCount() const;

傳回值

項目數。 傳回的計數大於最後一個專案的索引值(索引是以零起始的)。 如果發生錯誤,則 CB_ERR 為 。

範例

// 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

取得下拉式方塊控制項所顯示的提示文字。

CString GetCueBanner() const;

BOOL GetCueBanner(
    LPTSTR lpszText,
    int cchText) const;

參數

lpszText
[out]接收提示橫幅文字之緩衝區的指標。

cchText
[in]參數指向的 lpszText 緩衝區大小。

傳回值

在第一個 CString 多載中,如果物件存在,則包含提示橫幅文字;否則為 CString 長度為零的物件。

-或-

在第二個多載中,如果這個方法成功, TRUE 則為 ,否則為 FALSE

備註

提示文字是顯示在下拉式方塊控制項輸入區域中的提示。 提示文字會顯示,直到使用者提供輸入為止。

這個方法會傳送 CB_GETCUEBANNER 訊息,如 Windows SDK 中所述。

CComboBox::GetCurSel

呼叫此成員函式,以判斷已選取下拉式方塊中的專案。

int GetCurSel() const;

傳回值

下拉式方塊清單方塊中目前選取專案的以零起始的索引,如果沒有選取任何專案, CB_ERR 則為 。

備註

GetCurSel 會傳回清單中的索引。

範例

// 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呼叫成員函式,以擷取下拉式下拉式方塊中可見 (dropd-down) 清單方塊的螢幕座標。

void GetDroppedControlRect(LPRECT lprect) const;

參數

lprect
指向 要接收座標的 RECT 結構

範例

// 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呼叫成員函式,以判斷下拉式下拉式方塊的清單方塊是否可見(下拉式清單)。

BOOL GetDroppedState() const;

傳回值

如果清單方塊可見,則為非零;否則為 0。

範例

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

CComboBox::GetDroppedWidth

呼叫此函式,以圖元為單位擷取下拉式方塊清單方塊的最小允許寬度。

int GetDroppedWidth() const;

傳回值

如果成功,則允許的寬度下限,以圖元為單位;否則為 CB_ERR

備註

此函式僅適用于具有 或 CBS_DROPDOWNLIST 樣式的 CBS_DROPDOWN 下拉式方塊。

根據預設,下拉式清單方塊的最小允許寬度為 0。 可以藉由呼叫 SetDroppedWidth 來設定允許的最小寬度。 顯示下拉式方塊的清單方塊部分時,其寬度是最小允許寬度或下拉式方塊寬度的較大。

範例

請參閱 的 SetDroppedWidth 範例。

CComboBox::GetEditSel

取得下拉式方塊編輯控制項中目前選取範圍的開始和結束字元位置。

DWORD GetEditSel() const;

傳回值

32 位值,其中包含低序字組的起始位置,以及在高序單字的選取範圍結尾之後,第一個非選取字元的位置。 如果在沒有編輯控制項的下拉式方塊上使用此函式, CB_ERR 則會傳回 。

範例

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呼叫成員函式,以判斷下拉式方塊是否具有預設的使用者介面或擴充的使用者介面。

BOOL GetExtendedUI() const;

傳回值

如果下拉式方塊具有擴充的使用者介面,則為非零;否則為 0。

備註

擴充的使用者介面可以透過下列方式來識別:

  • 按一下靜態控制項只會針對具有樣式的 CBS_DROPDOWNLIST 下拉式方塊顯示清單方塊。

  • 按下向下鍵會顯示清單方塊 (F4 已停用)。

當專案清單不可見時,會停用靜態控制項中的捲動(方向鍵已停用)。

範例

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

CComboBox::GetHorizontalExtent

從下拉式方塊中擷取寬度以圖元為單位,下拉式方塊的清單方塊部分可以水準捲動。

UINT GetHorizontalExtent() const;

傳回值

下拉式方塊清單方塊部分的可捲動寬度,以圖元為單位。

備註

只有當下拉式方塊的清單方塊部分具有水準捲軸時,才適用。

範例

// 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

擷取與指定下拉式方塊專案相關聯的應用程式提供 32 位值。

DWORD_PTR GetItemData(int nIndex) const;

參數

nIndex
包含下拉式方塊清單方塊中專案之以零起始的索引。

傳回值

與專案相關聯的 32 位值,如果 CB_ERR 發生錯誤,則為 。

備註

您可以使用成員函式呼叫的參數 SetItemData 來設定 dwItemData 32 位值。 GetItemDataPtr如果要擷取的 32 位值是指標 ,請使用成員函式。 void*

範例

// 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

擷取與指定下拉式方塊專案相關聯的應用程式提供的 32 位值作為指標 ( void* )。

void* GetItemDataPtr(int nIndex) const;

參數

nIndex
包含下拉式方塊清單方塊中專案之以零起始的索引。

傳回值

擷取指標,如果發生錯誤,則為 -1。

範例

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呼叫成員函式,以擷取下拉式方塊中的清單專案高度。

int GetItemHeight(int nIndex) const;

參數

nIndex
指定要擷取其高度的下拉式方塊元件。 nIndex如果參數是 -1,則會擷取下拉式方塊的 edit-control (或 static-text) 部分的高度。 如果下拉式方塊具有 CBS_OWNERDRAWVARIABLE 樣式, nIndex 請指定要擷取其高度的清單專案以零起始的索引。 否則, nIndex 應該設定為 0。

傳回值

下拉式方塊中指定專案的高度,以圖元為單位。 如果發生錯誤,則傳回值為 CB_ERR

範例

// 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

從下拉式方塊的清單方塊取得字串。

int GetLBText(
    int nIndex,
    LPTSTR lpszText) const;

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

參數

nIndex
包含要複製之清單方塊字串之以零起始的索引。

lpszText
指向要接收字串的緩衝區。 緩衝區必須有足夠的空間供字串和終止的 Null 字元使用。

rString
CString 參考。

傳回值

字串的長度(以位元組為單位),不包括終止的 Null 字元。 如果未 nIndex 指定有效的索引,則傳回值為 CB_ERR

備註

這個成員函式的第二種 CString 形式會以專案的文字填滿 物件。
如果 nIndex 無效,此函式會 E_INVALIDARG 擲回例外狀況(錯誤碼: -21470248090x80070057

範例

// 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

取得下拉式方塊清單方塊中字串的長度。

int GetLBTextLen(int nIndex) const;

參數

nIndex
包含清單方塊字串以零起始的索引。

傳回值

以位元組為單位的字串長度,不包括終止的 Null 字元。 如果未 nIndex 指定有效的索引,則傳回值為 CB_ERR

範例

請參閱 的 CComboBox::GetLBText 範例。

CComboBox::GetLocale

擷取下拉式方塊所使用的地區設定。

LCID GetLocale() const;

傳回值

下拉式方塊中字串的地區設定識別碼 (LCID) 值。

備註

例如,地區設定可用來判斷排序下拉式方塊中字串的排序次序。

範例

請參閱 的 CComboBox::SetLocale 範例。

CComboBox::GetMinVisible

取得目前下拉式方塊控制項下拉式清單中的可見專案數目下限。

int GetMinVisible() const;

傳回值

目前下拉式清單中的可見專案數目下限。

備註

這個方法會傳送 CB_GETMINVISIBLE 訊息,如 Windows SDK 中所述。

CComboBox::GetTopIndex

擷取下拉式方塊清單方塊中第一個可見專案之以零起始的索引。

int GetTopIndex() const;

傳回值

如果成功,則為下拉式方塊清單方塊中第一個可見專案之以零起始的索引, CB_ERR 否則為 。

備註

一開始,專案 0 位於清單方塊頂端,但如果清單方塊捲動,另一個專案可能位於頂端。

範例

// 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

配置記憶體,以將清單方塊專案儲存在下拉式方塊的清單方塊部分。

int InitStorage(
    int nItems,
    UINT nBytes);

參數

nItems
指定要加入的專案數目。

nBytes
指定要配置給專案字串的記憶體數量,以位元組為單位。

傳回值

如果成功,下拉式方塊清單方塊部分可以儲存的最大專案數,才能重新配置記憶體,否則 CB_ERRSPACE 表示沒有足夠的記憶體可用。

備註

先呼叫此函式,再將大量專案加入至 的清單方塊部分 CComboBox

僅限 Windows 95/98:參數 wParam 限制為 16 位值。 這表示清單方塊不能包含超過 32,767 個專案。 雖然限制專案數目,但清單方塊中專案的總大小只會受限於可用的記憶體。

此函式有助於加速具有大量專案的清單方塊初始化(超過 100 個)。 它會預先配置指定的記憶體數量,讓後續 AddString 的 、 InsertString 和 函 Dir 式需要最短的時間。 您可以使用參數的估計值。 如果您高估,則會配置一些額外的記憶體;如果您低估,則一般配置會用於超過預先配置數量的專案。

範例

// 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

將字串插入下拉式方塊的清單方塊中。

int InsertString(
    int nIndex,
    LPCTSTR lpszString);

參數

nIndex
包含要接收字串之清單方塊中位置以零為基底的索引。 如果此參數為 -1,字串會新增至清單結尾。

lpszString
指向要插入的 null 結尾字串。

傳回值

已插入字串之位置以零為基底的索引。 如果發生錯誤,則傳回值為 CB_ERR 。 如果空間不足而無法儲存新字串,則傳回值為 CB_ERRSPACE

備註

AddString不同于成員函式, InsertString 成員函式不會讓具有 CBS_SORT 樣式的清單排序。

注意

Windows ComboBoxEx 控制項不支援此函式。 如需此控制項的詳細資訊,請參閱 ComboBoxEx Windows SDK 中的控制項

範例

// 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

限制使用者可以在下拉式方塊的編輯控制項中輸入的文字長度,以位元組為單位。

BOOL LimitText(int nMaxChars);

參數

nMaxChars
指定使用者可以輸入之文字的長度(以位元組為單位)。 如果此參數為 0,則文字長度會設定為 65,535 個位元組。

傳回值

如果成功,則為非零。 如果針對具有樣式 CBS_DROPDOWNLIST 的下拉式方塊或沒有編輯控制項的下拉式方塊呼叫,則傳回值為 CB_ERR

備註

如果下拉式方塊沒有樣式 CBS_AUTOHSCROLL ,將文字限制設定為大於編輯控制項的大小將不會有任何作用。

LimitText 只會限制使用者可以輸入的文字。 當傳送郵件時,它不會影響任何已經在編輯控制項中的文字,也不會影響在選取清單方塊中的字串時複製到編輯控制項的文字長度。

範例

// 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

建立具有擁有者繪製樣式的下拉式方塊時,由架構呼叫。

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

參數

lpMeasureItemStruct
結構的長指標 MEASUREITEMSTRUCT

備註

根據預設,此成員函式不會執行任何動作。 覆寫此成員函式並 MEASUREITEMSTRUCT 填入 結構,以通知 Windows 下拉式方塊中清單方塊的維度。 如果使用 樣式建立 CBS_OWNERDRAWVARIABLE 下拉式方塊,架構會針對清單方塊中的每個專案呼叫這個成員函式。 否則,這個成員只會呼叫一次。

CBS_OWNERDRAWFIXED使用 以 成員函 CWnd 式建立 SubclassDlgItem 的擁有者繪製下拉式方塊中的樣式,牽涉到進一步的程式設計考慮。 請參閱技術附注 14 中的 討論。

如需結構的描述, MEASUREITEMSTRUCT 請參閱 CWnd::OnMeasureItem

範例

// 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

將剪貼簿中的資料插入目前游標位置下拉式方塊的編輯控制項。

void Paste();

備註

只有在剪貼簿包含格式的資料時,才會插入資料 CF_TEXT

範例

// 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

從清單方塊移除所有專案,並編輯下拉式方塊的控制項。

void ResetContent();

範例

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

CComboBox::SelectString

在下拉式方塊的清單方塊中搜尋字串,如果找到字串,請選取清單方塊中的字串,並將其複製到編輯控制項。

int SelectString(
    int nStartAfter,
    LPCTSTR lpszString);

參數

nStartAfter
包含專案以零起始的索引,再搜尋第一個專案。 當搜尋到達清單方塊底部時,它會從清單方塊的頂端繼續回到 所 nStartAfter 指定的專案。 如果為 -1,則會從頭搜尋整個清單方塊。

lpszString
指向包含要搜尋之前置詞的 Null 終止字串。 搜尋與大小寫無關,因此此字串可以包含大寫和小寫字母的任何組合。

傳回值

如果找到字串,則為選取專案的以零起始的索引。 如果搜尋失敗,則傳回值為 CB_ERR ,且目前的選取範圍不會變更。

備註

只有當字串的初始字元 (從起點) 符合前置詞字串中的字元時,才會選取字串。

請注意, SelectStringFindString 成員函式都會尋找字串,但 SelectString 成員函式也會選取字串。

範例

// 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

設定下拉式方塊控制項顯示的提示文字。

BOOL SetCueBanner(LPCTSTR lpszText);

參數

lpszText
[in]包含提示文字之 Null 終止緩衝區的指標。

傳回值

如果方法成功,則為 TRUE,否則為 FALSE

備註

提示文字是顯示在下拉式方塊控制項輸入區域中的提示。 提示文字會顯示,直到使用者提供輸入為止。

這個方法會傳送 CB_SETCUEBANNER 訊息,如 Windows SDK 中所述。

範例

第一個程式碼範例會定義用來以程式設計方式存取下拉式方塊控制項的 變數 m_combobox 。 下一個範例中會使用此變數。

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

下一個程式碼範例會設定下拉式方塊控制項的提示橫幅。

// 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

在下拉式方塊的清單方塊中選取字串。

int SetCurSel(int nSelect);

參數

nSelect
指定要選取之字串的以零起始的索引。 如果為 -1,則會移除清單方塊中的任何目前選取專案,並清除編輯控制項。

傳回值

如果訊息成功,則為選取之專案的以零起始的索引。 如果 大於清單中的專案數目,或 nSelect 設定為 -1,則會清除選取範圍,則傳回值 CB_ERRnSelect 為 。

備註

如有必要,清單方塊會將字串捲動到檢視中(如果清單方塊可見)。 下拉式方塊編輯控制項中的文字會變更,以反映新的選取範圍。 移除清單方塊中的任何先前選取範圍。

範例

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

CComboBox::SetDroppedWidth

呼叫此函式以設定下拉式方塊清單方塊的最小允許寬度,以圖元為單位。

int SetDroppedWidth(UINT nWidth);

參數

nWidth
下拉式方塊清單方塊部分的最小允許寬度,以圖元為單位。

傳回值

如果成功,則為清單方塊的新寬度,否則 CB_ERR 為 。

備註

此函式僅適用于具有 或 CBS_DROPDOWNLIST 樣式的 CBS_DROPDOWN 下拉式方塊。

根據預設,下拉式清單方塊的最小允許寬度為 0。 顯示下拉式方塊的清單方塊部分時,其寬度是最小允許寬度或下拉式方塊寬度的較大。

範例

// 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

在下拉式方塊的編輯控制項中選取字元。

BOOL SetEditSel(
    int nStartChar,
    int nEndChar);

參數

nStartChar
指定起始位置。 如果起始位置設定為 -1,則會移除任何現有的選取範圍。

nEndChar
指定結束位置。 如果結束位置設定為 -1,則會選取從開始位置到編輯控制項中最後一個字元的所有文字。

傳回值

如果成員函式成功,則為非零;否則為 0。 如果 CB_ERRCComboBox 具有 CBS_DROPDOWNLIST 樣式或沒有清單方塊,則為 。

備註

位置是以零起始。 若要選取編輯控制項的第一個字元,您可以指定 0 的起始位置。 結尾位置是字元選取的最後一個字元之後。 例如,若要選取編輯控制項的前四個字元,您可以使用 0 的起始位置和結束位置 4。

注意

Windows ComboBoxEx 控制項不支援此函式。 如需此控制項的詳細資訊,請參閱 ComboBoxEx Windows SDK 中的控制項

範例

請參閱 的 CComboBox::GetEditSel 範例。

CComboBox::SetExtendedUI

SetExtendedUI呼叫成員函式,以選取具有 或 樣式之下拉式方 CBS_DROPDOWN 塊的預設使用者介面或 CBS_DROPDOWNLIST 擴充使用者介面。

int SetExtendedUI(BOOL bExtended = TRUE);

參數

bExtended
指定下拉式方塊是否應該使用擴充的使用者介面或預設使用者介面。 的值 TRUE 會選取擴充的使用者介面;的值 FALSE 會選取標準使用者介面。

傳回值

CB_OKAY 如果作業成功,或 CB_ERR 發生錯誤,則為 。

備註

擴充的使用者介面可以透過下列方式來識別:

  • 按一下靜態控制項只會針對具有樣式的 CBS_DROPDOWNLIST 下拉式方塊顯示清單方塊。

  • 按下向下鍵會顯示清單方塊 (F4 已停用)。

當專案清單不可見時,會停用靜態控制項中的捲動(方向鍵已停用)。

範例

請參閱 的 CComboBox::GetExtendedUI 範例。

CComboBox::SetHorizontalExtent

設定寬度,以圖元為單位,下拉式方塊的清單方塊部分可以水準捲動。

void SetHorizontalExtent(UINT nExtent);

參數

nExtent
指定下拉式方塊清單方塊部分可以水準捲動的圖元數。

備註

如果清單方塊的寬度小於此值,水準捲軸就會水準捲動清單方塊中的專案。 如果清單方塊的寬度等於或大於此值,則會隱藏水準捲軸,或者,如果下拉式方塊具有 CBS_DISABLENOSCROLL 樣式,則會停用。

範例

// 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

設定下拉式方塊中與指定專案相關聯的 32 位值。

int SetItemData(
    int nIndex,
    DWORD_PTR dwItemData);

參數

nIndex
包含要設定之專案之以零起始的索引。

dwItemData
包含要與專案產生關聯的新值。

傳回值

CB_ERR 如果發生錯誤,則為 。

備註

SetItemDataPtr如果 32 位專案是指標,請使用成員函式。

範例

// 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

將下拉式方塊中與指定專案相關聯的 32 位值設定為指定的指標 ( void* )。

int SetItemDataPtr(
    int nIndex,
    void* pData);

參數

nIndex
包含專案以零起始的索引。

pData
包含要與專案建立關聯的指標。

傳回值

CB_ERR 如果發生錯誤,則為 。

備註

即使專案在下拉式方塊中的相對位置可能會隨著新增或移除專案而變更,此指標仍對下拉式方塊的存留期有效。 因此,方塊內的專案索引可能會變更,但指標仍會保持可靠。

範例

// 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呼叫成員函式,以設定下拉式方塊中清單專案的高度,或下拉式方塊的編輯控制項 (或靜態文字) 部分的高度。

int SetItemHeight(
    int nIndex,
    UINT cyItemHeight);

參數

nIndex
指定是否設定下拉式方塊之編輯控制項(或靜態文字)部分的清單專案高度或高度。

如果下拉式方塊具有 CBS_OWNERDRAWVARIABLE 樣式, nIndex 請指定要設定其高度之清單專案之以零起始的索引, nIndex 否則必須為 0,而且會設定所有清單專案的高度。

如果 nIndex 為 -1,則會設定下拉式方塊的 edit-control 或 static-text 部分的高度。

cyItemHeight
指定 所識別 nIndex 下拉式方塊元件的高度,以圖元為單位。

傳回值

CB_ERR 如果索引或高度無效,則為 ;否則為 0。

備註

下拉式方塊的編輯控制項 (或靜態文字) 部分的高度,與清單專案的高度無關。 應用程式必須確保編輯控制項(或靜態文字)部分的高度不小於特定清單方塊專案的高度。

範例

// 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

設定此下拉式方塊的地區設定識別碼。

LCID SetLocale(LCID nNewLocale);

參數

nNewLocale
要為下拉式方塊設定的新地區設定識別碼 (LCID) 值。

傳回值

這個下拉式方塊的前一個地區設定識別碼 (LCID) 值。

備註

如果未 SetLocale 呼叫 ,則會從系統取得預設地區設定。 您可以使用主控台的區域(或國際)應用程式來修改此系統預設地區設定。

範例

// 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

設定目前下拉式方塊控制項下拉式清單中的可見專案數目下限。

BOOL SetMinVisibleItems(int iMinVisible);

參數

iMinVisible
[in]指定可見專案的數目下限。

傳回值

TRUE 如果此方法成功,則為 ;否則為 FALSE

備註

這個方法會傳送 CB_SETMINVISIBLE 訊息,如 Windows SDK 中所述。

範例

第一個程式碼範例會定義用來以程式設計方式存取下拉式方塊控制項的 變數 m_combobox 。 下一個範例中會使用此變數。

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

下一個程式碼範例會將 20 個專案插入下拉式方塊控制項的下拉式清單中。 然後,它會指定當使用者按下下拉箭號時,至少會顯示 10 個專案。

// 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

確保下拉式方塊的清單方塊部分可以看到特定專案。

int SetTopIndex(int nIndex);

參數

nIndex
指定清單方塊專案以零起始的索引。

傳回值

如果成功,則為零,如果 CB_ERR 發生錯誤則為零。

備註

系統會捲動清單方塊,直到指定的專案 nIndex 出現在清單方塊頂端,或達到最大捲動範圍為止。

範例

// Set the first visible item in the combo box to be the middle item
m_pComboBox->SetTopIndex(m_pComboBox->GetCount() / 2);

CComboBox::ShowDropDown

顯示或隱藏具有 CBS_DROPDOWNCBS_DROPDOWNLIST 樣式之下拉式方塊的清單方塊。

void ShowDropDown(BOOL bShowIt = TRUE);

參數

bShowIt
指定要顯示或隱藏下拉式清單方塊。 的值 TRUE 會顯示清單方塊。 的值 FALSE 會隱藏清單方塊。

備註

根據預設,此樣式的下拉式方塊會顯示清單方塊。

此成員函式不會影響以樣式建立的 CBS_SIMPLE 下拉式方塊。

範例

請參閱 的 CComboBox::GetDroppedState 範例。

另請參閱

MFC 範例 CTRLBARS
CWnd
階層架構圖表
CWnd
CButton
CEdit
CListBox
CScrollBar
CStatic
CDialog