MFC List控件插入ICON图标

想要在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控件的图标的插入已经完成,谢谢!!

 

你可能感兴趣的:(C++,MFC,C,图标插入,List控件)