CComboBoxEx如何使用?
我想在CComboBoxEx里插入左边是图像,右边是文字的Item。
这个类似乎很少人用,相关资料很少,CodeGuru干脆没有。
试了一下,有几个问题:
1.只有文字,没有图像
2.插入了两条,但拉下来后面还多出一点空白。
3.Item变得很高,不知道在哪里改。
最好有个完整的应用例子给我借鉴一下。
又或者CComboBoxEx不能满足我的要求,也请说明。
问题点数:50、回复次数:9Top
1 楼lixiaosan(小三)回复于 2004-09-01 17:07:05 得分 0
http://www.codeproject.com/combobox/combobold.aspTop
2 楼athena521(小猪)回复于 2004-09-01 17:08:52 得分 0
http://www.vckbase.com/document/viewdoc/?id=534Top
3 楼luokun(信誉分只跌不涨)回复于 2004-09-01 17:17:41 得分 0
楼上两位都是用CComboBox派生,我也知道从CComboBox派生可以实现,但是我现在还没有下决心要自己来做这个类。
如果CComboBoxEx能够实现,我就用CComboBoxEx。除非CComboBoxEx真的不能实现,我才会考虑自己来从CComboBox派生。Top
4 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-09-04 16:24:55 得分 25
有一个新的类CComboBoxEx(由CComboBox派生)来实现这一功能。在CComboBoxEx类中添加了一些新的成员函数来实现新的功能:首先你需要调用CImageList* SetImageList( CImageList* pImageList );来设置ImageList,然后调用
int InsertItem( const COMBOBOXEXITEM* pCBItem );来添加行,其中COMBOBOXEXITEM定义如下:
typedef struct { UINT mask; int iItem; LPTSTR pszText; int cchTextMax; int iImage; int iSelectedImage; int iOverlay; int iIndent; LPARAM lParam;} COMBOBOXEXITEM, *PCOMBOBOXEXITEM;
你需要设置mask=CBEIF_IMAGE|CBEIF_TEXT,并设置iItem为插入位置,设置pszText为显示字符串,设置iImage为显示的图标索引。下面的代码演示了如何进行插入:
/*m_cbeWnd 为已经创建的CComboBox对象
m_list 为CImageList对象IDB_IMG 为16*(16*4)的位图,每个图片为16*16共4个图标*/
m_list.Create(IDB_IMG,16,4,RGB(0,0,0));
m_cbeWnd.SetImageList(&m_list);
COMBOBOXEXITEM insItem;insItem.mask=CBEIF_IMAGE|CBEIF_TEXT;insItem.iItem=0;insItem.iImage=0;insItem.pszText="Line 1";m_cbeWnd.InsertItem(&insItem);insItem.iItem=1;insItem.iImage=1;insItem.pszText="Line 2";m_cbeWnd.InsertItem(&insItem);
通过调用int DeleteItem( int iIndex );来删除行,并指明行的位置。
通过调用BOOL GetItem( COMBOBOXEXITEM* pCBItem )/BOOL SetItem( const COMBOBOXEXITEM* pCBItem );来得到/设置行数据。Top
5 楼luokun(信誉分只跌不涨)回复于 2004-09-06 19:50:56 得分 0
好奇怪啊,ImageList也创建成功了,也设置了,但是还是没有内容。InsertItem总是返回0,不管添加几项。Top
6 楼BOYGUARD110(BOYGUARD110)回复于 2004-09-13 17:28:06 得分 0
http://mon.512j.com/vasualc/comboboxex.htmTop
7 楼luokun(信誉分只跌不涨)回复于 2004-09-13 18:14:05 得分 0
还是没有东西,还是总是返回0,疯了……Top
8 楼skychild(大鸟)回复于 2004-09-23 21:24:47 得分 25
m_ctrlCXSymbol为CComboBoxEx对象,在显示图片前应先设置insItem的mask属性.
m_imglst为CImageList对象,可以装载位图.(
CBitmap bt;
bt.LoadBitmap(你的位图ID);
CImageList m_imglst;
m_imglst.Create(40,16,ILC_COLOR16,0,7);
//我的是7个40*16位图,
m_imglst.Add(&bt,RGB(0,0,0));
)
m_ctrlCXSymbol.SetImageList(&m_imglst);
COMBOBOXEXITEM insItem;
insItem.mask=CBEIF_IMAGE|CBEIF_TEXT;
insItem.iItem=0;
insItem.iImage=0;
insItem.pszText="轿车";
m_ctrlCXSymbol.InsertItem(&insItem);
insItem.iItem=1;
insItem.iImage=1;
insItem.pszText="消防车";
m_ctrlCXSymbol.InsertItem(&insItem);
再试试看!Top
9 楼tianhua(网络过客)回复于 2004-09-23 21:34:09 得分 0
msdnTop




