视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
CComboBoxEx 扩展CComboBox 显示图标
2025-09-27 16:13:05 责编:小OO
文档
CComboBoxEx 扩展CComboBox 显示图标  

类CComboBoxEx从CComboBox类扩展而来,它最大的特点是支持图像列表。在标准的CComboBox中,绘制图像需要程序员把组合框控件设为自定义风格(CBS_OWNERDRAWFIXED或者CBS_OWNERDRAWVARIABLE以及CBS_HASSTRINGS)。使用CComboBoxEx则不需要这些繁琐的步骤,因为CComboBoxEx类中已经实现了处理图像的功能,它可以直接存取图形列表中的图像。在CComboBoxEx类中,每项最多可有3个图像:一个代表选中状态,一个代表未选中状态,另一个代表覆盖的图像。CComboBoxEx支持四种风格:CBS_SIMPLE、CBS_DROPDOWN、CBS_DROPDOWNLIST和WS_CHILD。创建窗口时如果提供其它的风格,则都将被忽略。但是在窗口创建完成之后,可以调用成员函数SetExtendedStyle把组合框设置成其它的风格。

CComboBoxEx每一项的属性,例如项的下标、图像、缩进值和文本字符串,保存在Win32结构COMBOBOXEXITEM中,结构中也包括了记录回调标记的成员。 

COMBOBOXEXITEM结构如下:

typedef struct {

UINT mask;

int iItem;

LPTSTR pszText;

int cchTextMax;

int iImage;

int iSelectedImage;

int iOverlay;

int iIndent;

LPARAM lParam;

} COMBOBOXEXITEM, *PCOMBOBOXEXITEM;

成员说明:

UNIT屏蔽 一组位标志,指定使用此结构时执行哪些操作。它可以是以下标志的组合:

CBEIF_DI_SETITEM

CBEIF_IMAGE

CBEIF_INDENT

CBEIF_LPARAM

CBEIF_OVERLAY

CBEIF_SELECTEDIMAGE

CBEIF_TEXT

例如,如果在一个操作中需要设置或者转储图像字段时,则设置CBEIF_IMAGE标志

int iItem 基于零索引的扩展组合框项数

LPSTR pszText 包含或者是接收项文本的字符串缓冲区指针,如果想得到字符串内容,此单元必须设置为接收字符串指针,字符串长度在cchTextMax中指定。

int cchTextMax 在pszText可以获取的字符串缓冲区长度,当指定字符串文本内容时,此单元被忽略

int iImage 图像列表中基于零的图像索引,用于表示"未选定"的状态

int iSelectedImage 在图像列表中基于零的图像索引,用于表示"选定"的状态

int iOverlay 图像列表中图像的索引,用于覆盖当前的图像

int iIndent 10像素缩进间隔的数量

LPARAM lParam 该项的32位参数

CComboBoxEx类的成员函数:

CComboBoxEx  构造函数,构造一个CComboBoxEx对象

Create 初始化函数,创建组合框并和CComboBoxEx对象相联系

DeleteItem 从组合框控件中删除一个项

GetIttem 检索组合框中某个项的相关信息

InsertItem 在组合框控件中插入一项

SetItem 设置组合框中某个项的属性

HasEditChanged 检测用户是否改变了组合框中编辑控件的内容

GetExtendedStyle 检索在组合框上采用的扩展风格

GetExtendedStyle 设置组合框的扩展风格

GetEditCtrl 检索组合框中编辑控件的句柄

GetComboBoxCtrl 取得指向子组合框控件的指针

GetImageList 取得指向在组合框控件中图像列表的指针。

SetImageList 为组合框控件设置一个图像列表。

主要成员函数说明:

1、CComboBoxEx::SetItem

函数原型:BOOL SetItem( const COMBOBOXEXITEM* pCBItem );

返回值:调用成功时,返回非零值,否则为0。

参数:

pCBItem 指向用于存放项目信息的COMBOBOXEXITEM结构的一个指针。

2、CComboBoxEx::SetImageList

函数原型:CImageList* SetImageList( CImageList* pImageList );

返回值:返回一个CImageList对象指针,指明此前CComboBoxEx控件采用的图像列表。如果此前没有设置图像列表,则返回NULL。

参数:

pImageList CImageList对象指针,指明待设置的图像列表。

说明:如果改变了编辑控件的缺省高度,在调用SetImageList以后需要用Win32函数SetWindowPos来改变控件的大小,否则显示会出错。返回值指向的CImageList对象是一个临时对象,系统将在下一个空闲处理中删除它。

3、CComboBoxEx::GetItem

函数原型:BOOL GetItem( COMBOBOXEXITM* pCBItem );

返回值:调用成功时返回非零值,否则为0。

参数:

pCBItem 用来存放项信息的COMBOBOXEXITM结构的指针。

在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 );来得到/设置行数据

下载本文
显示全文
专题