我想仅在listctrl的特定行中设置图像。
如果我使用CListCtrl的SetImageList,它会在每行的第一列设置图像。
是否可以仅在我想要的任何一行中设置图像。
答案 0 :(得分:0)
我觉得它有点乱,但对我有用。
如果您的CListCtrl具有LVS_OWNERDRAWFIXED样式,那么您可以决定哪个列具有哪个列。 为此,您需要在创建后为列表设置扩展样式LVS_EX_SUBITEMIMAGES。比你添加CImageList 字段到您的CListCtrl派生类,例如它将具有m_imgList名称。必须使用默认值初始化此字段 以及将要使用的图像资源。之后,您必须调用SetImageList并将其传递给m_imgList。只要你的清单会 有LVS_OWNERDRAWFIXED样式你需要实现DrawItem函数,你将在其中调用这样的图像绘制:
LVITEM lvItem = {0};
lvItem.mask = LVIF_IMAGE;
lvItem.iSubItem = nCol; // column index
lvItem.iItem = nItem; // item index
GetItem(&lvItem);
POINT p; // init it like you want
pDC // pointer on device context
m_imgList.Draw(pDC, lvItem.iImage, p, ILD_MASK);
在此之前,当您使用值填充列表时,您必须填写所需列的LVITEM结构:
LVITEM lvItem = {0};
lvItem.iItem = nItem; // item index
lvItem.iSubItem = i; // column index
lvItem.iImage = nImg; // image index from imageList
lvItem.mask = LVIF_IMAGE;
之后你必须用这个lvItem参数调用InsertItem或SetItem。
答案 1 :(得分:0)
实现它的一种简单方法是在CImageList中添加透明图像,并将其设置在您不希望图像显示的列表项上。