从 CListCtrl 中删除图像

Posted

技术标签:

【中文标题】从 CListCtrl 中删除图像【英文标题】:Remove image from CListCtrl 【发布时间】:2016-11-24 10:38:19 【问题描述】:

如何从 ClistCtrl 中删除图像:

我正在尝试如下:

LVITEM item;
item.mask = LVIF_TEXT;
item.iItem = rowIndex;
item.iSubItem = 0;
item.pszText = L"";
item.state = 0;
item.stateMask = 0;
item.iImage = -1;
item.lParam = 0;

listCtrl.InsertItem(&item);

我的 CListCtrl 有正确显示的图像列表。怎么去掉?

试过这个:

  if (dataValue.at(0) == INVALID)
       
        listCtrl.InsertItem(rowIndex, L"", 0);
       
    else
    
        LVITEM item =  0 ;
        item.mask = LVIF_TEXT | LVIF_IMAGE;
        item.iItem = rowIndex;
        item.pszText = L"Test";
        item.iImage = -1;
        listCtrl.SetItem(&item);
    

【问题讨论】:

你看过CListCtrl::DeleteItem吗? 它不起作用。它会删除所有文本和图像。我只需要删除图像 所以,SetItem 如果您不想删除整个项目,而是想更新它。您是否尝试过查看文档? 一旦添加了图像,您就不能没有图像。这样做的方法是在你的图像列表中有一个空图像。 【参考方案1】:

如果要删除图像,请将LVIF_IMAGE 添加到掩码中:

LVITEM item =  0 ;
item.mask = LVIF_IMAGE;
item.iItem = rowIndex;
item.iImage = -1;
listCtrl.SetItem(&item);

如果您不使用正确的掩码,则相应的成员将被忽略。

来自LVITEM documentation:

LVIF_IMAGEiImage 成员有效或必须设置。

LVIF_TEXTpszText 成员有效或必须设置

【讨论】:

实际上它是一个验证图标。在有效情况下,该行中将没有图像,只有其他单元格中的文本。在无效的情况下会有图像和文本 如果我在掩码中同时使用这两个项目,则文本和图像都消失了。 同样,它实际上隐藏了文本和图像 我刚刚测试了它,它可以工作。 5行代码,不知道哪里出错了。 你能看到编辑代码吗?第一个条件是同时显示图像和文本。在其他情况下,我只需要显示文本。但它隐藏了文本和图像。你能猜到为什么吗?【参考方案2】:

我需要的是在无效情况下显示验证图标并在有效情况下隐藏图标:

if (dataValue.at(0) == INVALID)
     
    listCtrl.InsertItem(rowIndex, L"");
     
else
  
    listCtrl.InsertItem(rowIndex, L"", -1);
  

在我看来,隐藏图像的唯一方法是将无效图像设置为 -1 作为第三个参数。

这很奇怪!

【讨论】:

您的问题显然是关于修改现有图像项。您应该询问“插入没有图像的项目”。 -1 是无效的图像索引,它欺骗了列表视图控件。你真的应该使用一个指示无效的图标。

以上是关于从 CListCtrl 中删除图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MFC 的 CListCtrl 中插入位图或其他图像对象?

如何在 MFC 中将图像添加到 CListCtrl

CListCtrl 中的水印图像

关于CListCtrl和CTreeCtrl的状态图像的问题 相当初级 MFC高手进来

CListCtrl SetIconSpacing 包含文本

如果任何列中不需要图像/图标,MFC CListCtrl是否合适?