从 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_IMAGE
iImage
成员有效或必须设置。
LVIF_TEXT
pszText
成员有效或必须设置
【讨论】:
实际上它是一个验证图标。在有效情况下,该行中将没有图像,只有其他单元格中的文本。在无效的情况下会有图像和文本 如果我在掩码中同时使用这两个项目,则文本和图像都消失了。 同样,它实际上隐藏了文本和图像 我刚刚测试了它,它可以工作。 5行代码,不知道哪里出错了。 你能看到编辑代码吗?第一个条件是同时显示图像和文本。在其他情况下,我只需要显示文本。但它隐藏了文本和图像。你能猜到为什么吗?【参考方案2】:我需要的是在无效情况下显示验证图标并在有效情况下隐藏图标:
if (dataValue.at(0) == INVALID)
listCtrl.InsertItem(rowIndex, L"");
else
listCtrl.InsertItem(rowIndex, L"", -1);
在我看来,隐藏图像的唯一方法是将无效图像设置为 -1 作为第三个参数。
这很奇怪!
【讨论】:
您的问题显然是关于修改现有图像项。您应该询问“插入没有图像的项目”。-1
是无效的图像索引,它欺骗了列表视图控件。你真的应该使用一个指示无效的图标。以上是关于从 CListCtrl 中删除图像的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MFC 的 CListCtrl 中插入位图或其他图像对象?