C++ 在MFC中为树中的特定树项目添加图标(CTreeCtrl)

C++ 在MFC中为树中的特定树项目添加图标(CTreeCtrl),c++,mfc,treecontrol,C++,Mfc,Treecontrol,我们可以为特定的树项目添加图标吗 我正在使用以下功能添加带有图标的项目: HTREEITEM插入项(LPCTSTR lpszItem,int nImage,int nSelectedImage,HTREEITEM hParent=TVI_ROOT,HTREEITEM hInsertAfter=TVI_LAST); 要跳过某个项目的图标,我对nImage和nSelectedImage使用-1值。这样做,图标不会出现,但空间来了。您看过吗 最简单的方法是填充和传递结构 typedef struct

我们可以为特定的树项目添加图标吗

我正在使用以下功能添加带有图标的项目:

HTREEITEM插入项(LPCTSTR lpszItem,int nImage,int nSelectedImage,HTREEITEM hParent=TVI_ROOT,HTREEITEM hInsertAfter=TVI_LAST);

要跳过某个项目的图标,我对
nImage
nSelectedImage
使用-1值。这样做,图标不会出现,但空间来了。

您看过吗

最简单的方法是填充和传递结构

typedef struct tagTVITEM {
  UINT      mask;
  HTREEITEM hItem;
  UINT      state;
  UINT      stateMask;
  LPTSTR    pszText;
  int       cchTextMax;
  int       iImage;
  int       iSelectedImage;
  int       cChildren;
  LPARAM    lParam;
} TVITEM, *LPTVITEM;
mask
设置为
TVIF_IMAGE
并指定
iImage

首先,您需要创建一个在
CTreeCtrl
期间保持有效的
CImageList
对象。通常将其作为变量添加到类中。例如:

m_imgList.Create(IDB_BMP_CHECK_IMAGELIST, 16, 10, 0x0000FF00);
m_treeCtrl.SetImageList(&m_imgList, LVSIL_SMALL);
一旦它被初始化,你可以打电话。例如:

m_imgList.Create(IDB_BMP_CHECK_IMAGELIST, 16, 10, 0x0000FF00);
m_treeCtrl.SetImageList(&m_imgList, LVSIL_SMALL);

此后,您可以使用图像索引值。

这会产生与OP试图阻止的效果相同的效果。如果不为某个项目设置图像,则该项目所在位置将有空白。OP希望每个项目都从最左边开始,不管它是否有图标。我明白了。我觉得这很难看。好的。@AndrewTruckle,I不可检测:谢谢你的回复。如果未为项目设置图标,则默认情况下使用索引0。但我只需要为特定的树项目添加图标。请分享信息,如果你有想法实现它。我想你会做业主画。或者使用另一种技术,如WPF,它可以很容易地决定如何绘制每个项目。@AndrewTruckle:谢谢您提供的信息。我将尝试建议的方法。