mfc listctrl 插入图片
时间: 2023-06-08 14:01:25 浏览: 237
在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控件中插入图片并展示了。
阅读全文