ListCtrl使用ImageList插入BMP文件

在论坛上,一位开发者遇到在ListCtrl中使用ImageList加载BMP文件显示不正确的问题。通过排查代码,发现ImageList::Create的尺寸与BMP文件尺寸不匹配导致ImageList::Add无法成功添加图片。调整尺寸后,虽然ImageList::GetImageCount显示图片已添加,但仍然无法显示。最终,将CListCtrl::SetImageList的参数改为LVSIL_SMALL使得BMP能正常显示。作者对参数影响显示的效果感到困惑,并分享了测试程序的下载链接。
摘要由CSDN通过智能技术生成

今天在论坛上面看到一个帖子,楼主使用ImageList添加BMP文件,然后在ListCtrl中使用,代码如下:

  1: CImageList* m_imagelist;
  2: m_imagelist = new CImageList();
  3: m_imagelist->Create(32, 32, ILC_COLOR32, 0, 4);
  4: HBITMAP hBitmap;
  5: CBitmap *pBitmap;
  6: CString FilePathName = "D://测试//4.BMP";
  7: pBitmap = new   CBitmap;
  8: //从文件导入位图
在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、付费专栏及课程。

余额充值