1、首先创建一个 CImageList 对象并初始化
CImageList *m_pImageList;
2、加载位图资源并将其添加到图像列表中、设置组合框的图像列表。
void CTestDlg::InitImageList()
{
CBitmap bmp;
UINT bitmapIDs[] = {IDB_BITMAP1,IDB_BITMAP2};
m_pImageList = new CImageList();
m_pImageList->Create(16, 16, ILC_COLOR16 | ILC_MASK, 6, 6);
for each(UINT id in bitmapIDs)
{
if (bmp.LoadBitmap(id))
{
m_pImageList->Add(&bmp, RGB(255, 255, 255));
bmp.DeleteObject();
} else
{
LOG(INFO)<<("Failed to load bitmap with ID %d\n", id);
}
}
}
3、创建并初始化 COMBOBOXEXITEM 结构。
根据 _index 设置图像索引和缩进(当_index为0时,将图像索引0的图标赋予它,其它则将图像索引1的图标赋予其,并且一次呈现树状结构缩进两个字符),将项插入到组合框中并设置当前选择项。
CComboBoxEx m_ComboBoxEx;
void CTestDlg::InsertDataToComboBoxEx()
{
LPTSTR addStr[] = {_T("内容1"),_T("内容2"),_T("内容3"),_T("内容4"),_T("内容5"),_T("内容6"),0};
for(int i=0; i<6; i++)
{
int _index = i;
COMBOBOXEXITEM cbi = { 0 };
CString str = addStr[i];
int nItem;
cbi.mask = CBEIF_IMAGE | CBEIF_INDENT | CBEIF_OVERLAY |
CBEIF_SELECTEDIMAGE | CBEIF_TEXT;
cbi.iItem = _index; //基于零索引的扩展组合框项数
cbi.pszText = str.GetBuffer();
cbi.cchTextMax = str.GetLength();
if (_index == 0)
{
cbi.iImage = 0; //基于零的图像索引,用于表示"未选定"的状态
cbi.iIndent = 0;
}
else
{
cbi.iImage = 1;
cbi.iIndent = 2 * _index;
}
cbi.iSelectedImage = 1; //基于零的图像索引,用于表示"选定"的状态
cbi.iOverlay = 0; //图像列表中图像的索引,用于覆盖当前的图像
nItem = m_ComboBoxEx.InsertItem(&cbi);
}
m_ComboBoxEx.SetImageList(m_pImageList);
m_ComboBoxEx.SetCurSel(0);
}