VC6.CTreeView::InsertItem已经设置为有子节点(TVIF_CHILDREN),如何在后面改为没有子节点.

kenshu 2011-11-15 01:08:46
//VC6.0
......
CTreeCtrl& cThisTree = GetTreeCtrl();
TV_INSERTSTRUCT strInsert;
......
strInsert.item.mask|=TVIF_CHILDREN;
......
HTREEITEM hDesktop = cThisTree.InsertItem(&strInsert);

......

后面如何通过hDesktop把它设置为没有子节点.
还有相反的过程(重新设置为有子节点)

谢谢!
...全文
7641 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kenshu 2011-11-15
  • 打赏
  • 举报
回复
用了5楼的方法.

谢谢楼上两位.
leegoex 2011-11-15
  • 打赏
  • 举报
回复

static int i = 0;

if (i%2 == 0)
{
TVITEM ti = {0};
ti.mask = TVIF_CHILDREN;
ti.cChildren = 1;
ti.hItem = m_hTree;
m_tree.SetItem(&ti);
i++;
}
else
{
TVITEM ti = {0};
ti.mask = TVIF_CHILDREN;
ti.cChildren = 0;
ti.hItem = m_hTree;
m_tree.SetItem(&ti);
i++;
}
kenshu 2011-11-15
  • 打赏
  • 举报
回复
我用了


TVITEM lc;
lc.hItem = 我的hItem;
this->GetTreeCtrl().GetItem(&lc);
lc.mask &= ~TVIF_CHILDREN;
this->GetTreeCtrl().SetItem(&lc);

但不行.
kenshu 2011-11-15
  • 打赏
  • 举报
回复
也就是,我原来插入一个节点时,指定它为 TVIF_CHILDREN

现在想变为 NOT TVIF_CHILDREN

一会可能又想改回来。

不知道讲得清不清楚。
kenshu 2011-11-15
  • 打赏
  • 举报
回复
其实是,

我插入后不管它了.

后面有事件导致它要去展开.这个事件发现,其实在不用或不能展开,我要把它的+号去掉.

再后面又有事件,发现它又可以展开了,我就要把这个+号加上来.

------------------------------

一个类似的例子是(只是一个比方,不是我当前要处理的问题)

程序读取了一个WINDOWS目录的的结构,

文件的,我就指定它为没有子节点。
目录的,我就指定它有子节点。

但当这个子目录要展开时,我发现它是空的,就改为没有子节点。

一会其它程序往这个子目录中放入文件,我就又改回来有节点。

大概是这个意思。
yuucyf 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 kenshu 的回复:]
//VC6.0
......
CTreeCtrl& cThisTree = GetTreeCtrl();
TV_INSERTSTRUCT strInsert;
......
strInsert.item.mask|=TVIF_CHILDREN;
......
HTREEITEM hDesktop = cThisTree.InsertItem(&strInsert);
……
[/Quote]
InsertItem不是有一个参数HTREEITEM hParent,指定插入的节点是谁的子节点吗?
如果想设置为没有子节点,那要么把它所有子节点删除,要不插入到Root下.

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧