MFC重绘CListCtrl时DrawItem中绘制CimageList图片
时间: 2024-12-08 15:14:39 浏览: 18
MFC 重绘CListCtrl、CTreeCtrl的滚动条.rar_CListCtrl_HNL2_MFC_MFC滚动条_mfc
5星 · 资源好评率100%
在MFC (Microsoft Foundation Classes) 中,当你需要在CListCtrl这样的控件上重绘图片时,通常会使用`OnDrawItem` 或 `DrawItem` 方法。如果你有一个CImageList包含图片,并想要在列表项中显示它,你可以这样做:
1. 首先,在创建CListCtrl时,记得设置其`lsmimglist`标志,以便支持图像列表 (`SetExtendedStyle(LVS_EX_IMAGE_LIST);`)。
2. 然后,在CListCtrl的视图类中,重写`OnDrawItem` 方法,如下所示:
```cpp
void YourListViewClass::OnDrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CRect rcItem;
CDC dc;
if (!lpDrawItemStruct->itemID || !lpDrawItemStruct->hDC)
return;
// 获取当前列表项的矩形
GetItemRect(lpDrawItemStruct->itemID, &rcItem, LVIR_BOUNDS);
// 创建设备上下文
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
pDC->SelectObject(m_imageList);
// 绘制图像列表
pDC->DrawIconIndirect(&rcItem, m_imageList.GetSafeHandle(), lpDrawItemStruct->itemState & LVIS_STATEIMAGEMASK);
// 如果需要自定义绘制文字或其他元素,请在此处添加相应代码
// 结束选区并释放资源
pDC->SelectStockObject(HOLLOW_BRUSH);
delete pDC;
}
```
这里,`m_imageList`是你之前加载或创建的CImageList对象。`DrawIconIndirect` 函数用于绘制图标到指定的位置。
阅读全文