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

 

MFC ListCtrl控件插入图片,可以通过以下几个步骤实现: 1. 在资源视图中添加一个ImageList,并添加需要展示的图片。可以使用CImageList类来进行操作。 2. 在ListCtrl的OnCreate函数中创建ImageList,并设置ImageList。 CImageList m_ImageList; m_ImageList.Create(48, 48, ILC_COLOR32, 0, 1); m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1)); GetListCtrl().SetImageList(&m_ImageList, LVSIL_SMALL); 其中48, 48是图片大小,ILC_COLOR32表示颜色深度,0表示初始分配的图片数量,1表示每次新增图片的数量。 3. 在ListCtrl的OnNotify函数中处理NM_CUSTOMDRAW消息,并在OnCustomDraw函数中绘制图片。 if (pNMHDR->code == NM_CUSTOMDRAW) { LPNMLVCUSTOMDRAW lpCustomDraw = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR); switch (lpCustomDraw->nmcd.dwDrawStage) { case CDDS_PREPAINT: return CDRF_NOTIFYITEMDRAW; case CDDS_ITEMPREPAINT: return CDRF_NOTIFYSUBITEMDRAW; case CDDS_ITEMPREPAINT | CDDS_SUBITEM: if (lpCustomDraw->iSubItem == 0) { CRect rc; GetListCtrl().GetSubItemRect(lpCustomDraw->nmcd.dwItemSpec, lpCustomDraw->iSubItem, LVIR_ICON, rc); m_ImageList.Draw(&lpCustomDraw->nmcd.hdc, 0, rc.TopLeft(), ILD_TRANSPARENT); return CDRF_SKIPDEFAULT; } break; } } 4. 在ListCtrl的SetItem函数中通过LVITEM结构体的iImage属性设置图片的索引。 LVITEM item; item.mask = LVIF_IMAGE; item.iItem = nItem; item.iImage = nIndex; GetListCtrl().SetItem(&item); 其中nIndex是添加的图片在ImageList中的索引。 通过以上步骤,就可以在MFC ListCtrl控件插入图片并展示了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值