CComboBoxEx如何使用?

luokun 2004-09-01 04:54:09
我想在CComboBoxEx里插入左边是图像,右边是文字的Item。
这个类似乎很少人用,相关资料很少,CodeGuru干脆没有。
试了一下,有几个问题:
1.只有文字,没有图像
2.插入了两条,但拉下来后面还多出一点空白。
3.Item变得很高,不知道在哪里改。

最好有个完整的应用例子给我借鉴一下。
又或者CComboBoxEx不能满足我的要求,也请说明。
...全文
1050 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianhua 2004-09-23
  • 打赏
  • 举报
回复
msdn
skychild 2004-09-23
  • 打赏
  • 举报
回复
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);
再试试看!
luokun 2004-09-13
  • 打赏
  • 举报
回复
还是没有东西,还是总是返回0,疯了……
BOYGUARD110 2004-09-13
  • 打赏
  • 举报
回复

http://mon.512j.com/vasualc/comboboxex.htm
luokun 2004-09-06
  • 打赏
  • 举报
回复
好奇怪啊,ImageList也创建成功了,也设置了,但是还是没有内容。InsertItem总是返回0,不管添加几项。
oyljerry 2004-09-04
  • 打赏
  • 举报
回复
有一个新的类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 );来得到/设置行数据。
luokun 2004-09-01
  • 打赏
  • 举报
回复
楼上两位都是用CComboBox派生,我也知道从CComboBox派生可以实现,但是我现在还没有下决心要自己来做这个类。
如果CComboBoxEx能够实现,我就用CComboBoxEx。除非CComboBoxEx真的不能实现,我才会考虑自己来从CComboBox派生。
athena521 2004-09-01
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc/?id=534
lixiaosan 2004-09-01
  • 打赏
  • 举报
回复
http://www.codeproject.com/combobox/combobold.asp

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧