从某些树视图项删除图像?

时间:2014-04-03 20:27:24

标签: c++ winapi treeview

我有treeview checkboxesimagelist设为TreeView_SetImageList()

我正在尝试从没有子节点的节点中删除图像。我成功地从父节点中删除checkboxes,所以我想尝试类似的方法:

// add an item

TVINSERTSTRUCT tvis = {0};

tvis.item.mask = TVIF_TEXT //  | TVIF_IMAGE;

//   tvis.item.iImage = -1;           // I thought this will work
//   tvis.item.iSelectedImage = -1;   // but it does not work at all

tvis.item.pszText = L"Some text";
tvis.hInsertAfter = TVI_LAST;
tvis.hParent = TVI_ROOT;

htItem = reinterpret_cast<HTREEITEM>( SendMessage( hwndTV, 
    TVM_INSERTITEM, 0, reinterpret_cast<LPARAM>( &tvis ) ) );

// remove image

TVITEM tvi;

tvi.hItem = htItem;
tvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvi.iImage = -1;
tvi.iSelectedImage = -1;

TreeView_SetItem( hwndTV, &tvi );

它没有按预期工作。首先,图片未显示,但项目文字不在checkbox

旁边

enter image description here

如果我选择另一个项目,图像会突然再次出现:

enter image description here

如果我再次点击有问题的节点,我会得到相同的结果,如第一张图片所示。

我的问题很简单:

如何从节点中删除图像?

谢谢。

最好的问候。

1 个答案:

答案 0 :(得分:1)

您无法从单个节点中删除图像。一旦分配了图像列表,TreeView就会为所有节点上的列表图像保留相同的空间,即使各个节点不显示列表中的图像。

要执行您要求的操作,请不要分配图像列表,然后根据需要custom-drawn the nodes显示图像列表。