CComboBoxEx控件使用
最近学习常用的控件,其中CComboBoxEx控件的参考较少。以下第一部分的内容来自MSDN
第一部分:
创建扩展组合框 (Extended Combo Box) 控件的方式取决于是在对话框中使用该控件还是在非对话框窗口中创建此控件。
直接在对话框中使用 CComboBoxEx
在非对话框窗口中使用 CComboBoxEx
- 在视图或窗口类中定义此控件。
- 调用控件的 Create 成员函数,可能在 OnInitialUpdate 中,也可能与父窗口的 OnCreate 处理函数一样早。设置此控件的样式。
扩展组合框 (Extended Combo Box) 控件的主要功能是可以将图像列表中的图像与组合框 (ComboBox) 控件中的各项相关联。每项都可以显示三个不同的图像:一个是选定状态的图像,一个是未选定状态的图像,第三个是覆盖图像的图像。
下面的过程将图像列表与扩展组合框 (Extended Combo Box) 控件相关联:
将图像列表与扩展组合框 (Extended Combo Box) 控件相关联
- 通过使用 CImageList 构造函数并存储所得到的指针来构造新的图像列表(或者使用现有图像列表对象)。
- 通过调用 CImageList::Create 初始化新的图像列表对象。以下代码是此调用的一个示例。
m_pImageList->Create(16, 16, ILC_COLOR, 2, 2);
- 为每个可能的状态添加可选图像:选定、未选定或覆盖。下面的代码添加三个预定义图像。
m_pImageList->Add(pApp->m_hIconSelected); m_pImageList->Add(pApp->m_hIconNotSelected); m_pImageList->Add(pApp->m_hIconOverlay);
- 通过调用 CComboBoxEx::SetImageList 将图像列表与控件相关联。
扩展组合框项所使用的不同类型的图像由 COMBOBOXEXITEM 结构的 iImage、iSelectedImage 和 iOverlay 成员中的值确定。每个值是关联控件图像列表中的图像索引。默认情况下,这些成员设置为 0,使控件不显示项的图像。如果要将图像用于特定项,可以在插入组合框项时相应地修改结构,或通过修改现有组合框项相应地修改结构。
设置新项的图像
如果正在插入新项,请使用正确的值初始化 iImage、iSelectedImage 和 iOverlay 结构成员,然后通过调用 CComboBoxEx::InsertItem 插入项。
下面的示例将新扩展组合框项 (cbi
) 插入扩展组合框 (Extended Combo Box) 控件 (m_comboEx
),并为所有三个图像状态提供索引:
COMBOBOXEXITEM cbi; CString str; int nItem; cbi.mask = CBEIF_IMAGE | CBEIF_INDENT | CBEIF_OVERLAY | CBEIF_SELECTEDIMAGE | CBEIF_TEXT; cbi.iItem = i; str.Format(_T("Item %02d"), i); cbi.pszText = (LPTSTR)(LPCTSTR)str; cbi.cchTextMax = str.GetLength(); cbi.iImage = 0; cbi.iSelectedImage = 1; cbi.iOverlay = 2; cbi.iIndent = (i & 0x03); //Set indentation according //to item position nItem = m_comboEx.InsertItem(&cbi); ASSERT(nItem == i);
设置现有项的图像
如果正在修改现有项,需要使用 COMBOBOXEXITEM 结构的 mask 成员。
修改现有项以使用图像
- 声明 COMBOBOXEXITEM 结构并将 mask 数据成员设置为要修改的值。
- 使用此结构调用 CComboBoxEx::GetItem。
- 使用适当的值修改刚返回的结构的 mask、iImage 和 iSelectedImage 成员。
- 传入已修改的结构来调用 CComboBoxEx::SetItem。
下面的示例通过交换第三个扩展组合框项的选定和未选定图像说明此过程:
COMBOBOXEXITEM cbi; CString str; int nItem; cbi.mask = CBEIF_IMAGE | CBEIF_SELECTEDIMAGE; cbi.iItem = 2; m_comboEx.GetItem(&cbi); cbi.iImage = 1; cbi.iSelectedImage = 0; nItem = m_comboEx.SetItem(&cbi); ASSERT(nItem != 0);
第二部分:
获取CComboBoxEX控件中项目的文字部分:
1.若样式为Drop Down
CEdit* pedit=m_comboEx.GetEditCtrl();
CString str;
pedit->GetWindowText(str);
2.若样式为Drop List
CString str;
int i=m_comboEx.GetCurSel();
int n=m_comboEx.GetLBTextLen(i);
m_comboEx.GetLBText(i,str);