1

我已将项目添加到 ListControl,它们有图像。现在我想改变它们,我试图做 GetItem 和 SetItem,但我做不到。至少我不知道如何获得我想要的物品。如何更改 ListView 中项目的图像?

谢谢

附言

我已经设法解决了。这是解决方案:

这是如何循环

LVITEMW pitem;
ZeroMemory(&pitem, sizeof(pitem));

pitem.mask  = LVIF_TEXT | LVIF_IMAGE;
pitem.iItem = <SET INDEX OF YOUR ITEMS HERE, YOU CAN LOOP HERE>;
pitem.iSubItem = 0;
pitem.pszText = new wchar_t[256];
pitem.cchTextMax = 255;
mlist.GetItem(&pitem);

选择一个项目后,您可以像这样更改它的图像:

pitem.iImage = newindex;
mlist.SetItem(&pitem);
4

2 回答 2

0

使用CListCtrl::SetItem是对的。您必须将nMask参数设置为LVIF_IMAGE并在参数的图像列表中提供图像的索引iImage

于 2013-01-18T14:57:45.027 回答
0

第一篇文章中强调的解决方案对我不起作用。简要查看 Microsoft 文档后,SetItem 函数的签名是:

BOOL SetItem(const LVITEM* pItem);

pItem 应该是指向LVITEM的指针,它是const,在这种情况下并非如此......

但是,下一个解决方案对我有用:

  // Let's say my CListCtrl is named m_listCtrl

  // Loop on items of CListCtrl
  for( int i = 0; i < m_listCtrl.GetItemCount(); i++ )
  {
     // And then you define a new image with the index iImage for the item i
     m_listCtrl.SetItem(i, 0, LVIF_IMAGE, NULL,
     iImage, 0, 0, 0);
  }
于 2021-09-06T08:33:55.757 回答