Mfc 在列表控件项中设置图像

Mfc 在列表控件项中设置图像,mfc,Mfc,我只想在listctrl的特定行中设置图像 如果我使用CListCtrl的SetImageList,它将在每行的第一列中设置图像 是否可以只在我想要的任何一行中设置图像。我觉得有点凌乱,但它适合我 如果您的CListCtrl具有LVS_OWNERDRAWFIXED样式,那么您可以决定图像将具有哪个列。 为此,在创建列表后,需要为列表设置扩展样式LVS_EX_子项图像。然后添加CImageList 字段,例如,它将具有m_imgList名称。必须使用默认值初始化此字段 以及将要使用的图像资源。之后

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

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


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

我觉得有点凌乱,但它适合我

如果您的CListCtrl具有LVS_OWNERDRAWFIXED样式,那么您可以决定图像将具有哪个列。 为此,在创建列表后,需要为列表设置扩展样式LVS_EX_子项图像。然后添加CImageList 字段,例如,它将具有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。

实现这一点的简单方法是在您的CImageList中添加一个透明图像,并将其设置在您不希望图像出现的列表项上。

为什么不在图像列表中添加一个空白图像,并设置您希望具有该项的图像?发布一些代码,因为您使用的实现可能存在问题,因为这应该是可能的。此外,它是您试图为图像解析的行还是列,因为它们不相同。