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_DROPDOWN 或 CBS_DROPDOWNLIST 樣式的下拉式方塊,選取預設使用者介面或擴充的使用者介面。 |
CComboBox::SetHorizontalExtent |
設定下拉式方塊清單框部分可以水平捲動的像素寬度。 |
CComboBox::SetItemData |
設定下拉式方塊中與指定專案相關聯的32位值。 |
CComboBox::SetItemDataPtr |
設定下拉式方塊中與指定專案相關聯的 32 位指標。 |
CComboBox::SetItemHeight |
設定下拉式方塊中列表專案的高度,或下拉式方塊之編輯控件(或靜態文字)部分的高度。 |
CComboBox::SetLocale |
設定下拉式方塊的地區設定標識碼。 |
CComboBox::SetMinVisibleItems |
設定目前下拉式方塊下拉式清單中的可見項目數目下限。 |
CComboBox::SetTopIndex |
告知下拉式方塊的清單框部分,以顯示位於頂端具有指定索引的專案。 |
CComboBox::ShowDropDown |
顯示或隱藏具有 CBS_DROPDOWN 或 CBS_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_DROPDOWN
或CBS_DROPDOWNLIST
樣式的下拉式方塊,因為按兩下會隱藏清單框,所以無法進行按兩下。ON_CBN_DROPDOWN
下拉式方塊的清單框即將下拉式清單框(可見)。 此通知訊息僅適用於具有CBS_DROPDOWN
或CBS_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_KEYDOWN
和 WM_CHAR
訊息,您必須將下拉式方塊的編輯和清單框控件子類別化、從 CEdit
和 CListBox
衍生類別衍生類別,並將這些訊息的處理程式新增至衍生類別。 如需詳細資訊,請參閱CWnd::SubclassWindow
。
繼承階層架構
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_NCCREATE
、 WM_CREATE
、 WM_NCCALCSIZE
和 WM_GETMINMAXINFO
訊息傳送至下拉式方塊。
基類中的 CWnd
、 OnNcCalcSize
OnCreate
和 OnGetMinMaxInfo
成員函式預設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_ERR
nIndex
為 。
備註
之後 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_DIRECTORY
所lpszWildCard
指定的名稱會指定目錄。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
擲回例外狀況(錯誤碼: -2147024809
、 0x80070057
。
範例
// 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
,且目前的選取範圍不會變更。
備註
只有當字串的初始字元 (從起點) 符合前置詞字串中的字元時,才會選取字串。
請注意, SelectString
和 FindString
成員函式都會尋找字串,但 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_ERR
nSelect
為 。
備註
如有必要,清單框會將字串卷動到檢視中(如果清單框可見)。 下拉式方塊編輯控件中的文字會變更,以反映新的選取範圍。 拿掉清單框中的任何先前選取範圍。
範例
// 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_ERR
CComboBox
具有 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_DROPDOWN
或 CBS_DROPDOWNLIST
樣式之下拉式方塊的清單框。
void ShowDropDown(BOOL bShowIt = TRUE);
參數
bShowIt
指定要顯示或隱藏下拉式清單框。 的值 TRUE
會顯示清單框。 的值 FALSE
會隱藏清單框。
備註
根據預設,此樣式的下拉式方塊會顯示清單框。
此成員函式不會影響以樣式建立的 CBS_SIMPLE
下拉式方塊。
範例
請參閱 CComboBox::GetDroppedState
的範例。
另請參閱
MFC 範例 CTRLBARS
CWnd
類
階層架構圖表
CWnd
類
CButton
類
CEdit
類
CListBox
類
CScrollBar
類
CStatic
類
CDialog
類