想要在list控件中插入icon,首先需要设置列表控件样式属性,代码如下:
//设置列表样式风格,使子项也能插入图标
m_resultlist.SetExtendedStyle(LVS_EX_GRIDLINES |LVS_EDITLABELS | LVS_EX_SUBITEMIMAGES);
其中m_resultlist为相应的list控件变量,最重要的是LVS_EX_SUBITEMIMAGES样式,这个属性指明list控件的子项也能插入ICON。
然后获取图标变量地址,并设置图像列表与list控件关联
先将想要插入的图标文件添加到工程中:
打开资源视图->ICON选项,然后选择添加。
再将图标文件放入图像列表中,因此,需要创建一个图像列表类的对象,代码可以放在主对话框的头文件中,代码如下:
CImageList m_ImageList;
接下来是获取图标变量地址,并设置图像列表与list控件关联,代码如下:
m_ImageList.Create(48, 48, ILC_MASK | ILC_COLOR32, 2, 0);
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_Gray)); //灰色图标
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_yellow)); //黄色图标
//设置图像列表和list控件关联
m_resultlist.SetImageList(&m_ImageList, LVSIL_SMALL);
在列表视图控件中插入图标
通过设置 LVITEM 结构体实现将图标插入列表视图控件,LVITEM 结构体内容如下:
typedef struct tagLVITEMW
{
UINT mask;
int iItem;
int iSubItem;
UINT state;
UINT stateMask;
LPWSTR pszText;
int cchTextMax;
int iImage;
LPARAM lParam;
int iIndent;
#if (NTDDI_VERSION >= NTDDI_WINXP)
int iGroupId;
UINT cColumns; // tile view columns
PUINT puColumns;
#endif
#if (NTDDI_VERSION >= NTDDI_VISTA)
int* piColFmt;
int iGroup; // readonly. only valid for owner data.
#endif
} LVITEMW, *LPLVITEMW;
其中,iItem为列表行的索引,iSubItem为列表列的索引,iImage为图标的索引,在将图标插入列表控件时主要设置这几个项即可。
在列表的行首插入图标代码如下:
LV_ITEM lvitem;
memset((char *)&lvitem, '\0', sizeof(LV_ITEM));
lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
lvitem.iItem = 2;
lvitem.iImage = 0;
lvitem.iSubItem = 0;
lvitem.stateMask = 0;
m_resultlist.InsertItem(&lvitem);
在每一行的子项中插入图标的代码如下:
LV_ITEM lvitem;
memset((char *)&lvitem, '\0', sizeof(LV_ITEM));
lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
lvitem.iImage = 0;
lvitem.iSubItem = 1;
lvitem.iImage = 2;
m_resultlist.SetItem(&lvitem); //子项中插入图标
至此,对list控件的图标的插入已经完成,谢谢!!