在列表控制项中设置图像

时间:2017-10-03 11:46:39

标签: mfc

我想仅在listctrl的特定行中设置图像。

如果我使用CListCtrl的SetImageList,它会在每行的第一列设置图像。

是否可以仅在我想要的任何一行中设置图像。

2 个答案:

答案 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中添加透明图像,并将其设置在您不希望图像显示的列表项上。