CComboBox 封裝 Windows 組合框控件,提供三種樣式:
資源編輯器 Type 屬性對應上述三種;Data 屬性可預填項目 (分號分隔);Sort 屬性控制是否自動排序。
CComboBox m_CtrlCombo,直接呼叫 m_CtrlCombo.InsertString(...)。((CComboBox*)GetDlgItem(IDC_COMBO1))->InsertString(...),無需變數但易出錯。| 函數 | 用途 | 備註 |
|---|---|---|
GetCount() | 取得項目總數 | 返回 int |
GetCurSel() | 取得當前選中索引 | 無選擇返回 -1 |
SetCurSel(int n) | 設定選中項目 | -1 清除選擇 |
GetLBText(int n, CString&) | 取得指定項目文字 | |
AddString(LPCTSTR) | 尾端新增項目 | 返回索引 |
InsertString(int, LPCTSTR) | 指定位置插入 | |
DeleteString(int) | 刪除指定項目 | |
ResetContent() | 清空所有項目 | |
FindStringExact(-1, LPCTSTR) | 精確查找字串 | 返回索引或 CB_ERR |
SetEditSel(int start, int end) | 設定編輯區選取範圍 | 僅 Simple/Drop-down 有效 |
GetEditSel() | 取得編輯區選取範圍 | |
LimitText(int) | 限制編輯區最大字元數 | |
SetDroppedWidth(int) | 設定下拉列表寬度 | 防止文字被截斷 |
ShowDropDown(BOOL) | 程式控制展開/收合 |
void CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 1. 清空並填充
m_Combo.ResetContent();
m_Combo.AddString(_T("選項一"));
m_Combo.AddString(_T("選項二"));
m_Combo.AddString(_T("選項三"));
// 2. 設定預設選中
m_Combo.SetCurSel(0);
// 3. 設定下拉寬度適應最長文字
CClientDC dc(&m_Combo);
CFont* pOld = dc.SelectObject(m_Combo.GetFont());
int maxWidth = 0;
for (int i = 0; i < m_Combo.GetCount(); ++i) {
CString txt; m_Combo.GetLBText(i, txt);
maxWidth = max(maxWidth, dc.GetTextExtent(txt).cx);
}
dc.SelectObject(pOld);
m_Combo.SetDroppedWidth(maxWidth + 20); // 留滾動條空間
}
ON_CBN_SELCHANGE:選擇改變 (最常用)ON_CBN_EDITCHANGE:編輯區文字變更 (僅 Simple/Drop-down)ON_CBN_DROPDOWN / ON_CBN_CLOSEUP:列表展開/收合ON_CBN_SELENDOK / ON_CBN_SELENDCANCEL:確認/取消選擇CBS_OWNERDRAWFIXED/VARIABLE,重寫 DrawItem / MeasureItem 實現圖文混排、多欄、顏色分級。SHAutoComplete (需 shlwapi.h) 為編輯區添加歷史/檔案路徑自動完成。CRecordset 或自定義容器,在 OnInitDialog 批次 AddString,大量資料建議用 CB_INITSTORAGE 預分配。