我有一个如下示意图的tree结构:()------------根节点1
|    |
|    |_________()一级子节点1
|    |    |
|    |    |_________()二级子节点1
|    |    |_________()二级子节点2
|    |
|    |_________()一级子节点2
|    |_________()一级子节点3
|    |_________()一级子节点4
|
()------------根节点2
|    |
|    |_________()一级子节点1
|    |    |
|    |    |_________()二级子节点1
|    |    |_________()二级子节点2
|    |
|    |_________()一级子节点2
|    |_________()一级子节点3
|    |_________()一级子节点4
|
.............
.............
()------------根节点 n
     |
     |_________()一级子节点1
     |    |
     |    |_________()二级子节点1
     |    |_________()二级子节点2
     |
     |_________()一级子节点2
     |_________()一级子节点3
     |_________()一级子节点4可见有n个并列的根节点,我想问的是,当我的位置在任意子节点时,如何获得对应根节点的句柄??
我已经试过的方法:
1.GetRootItem()返回值不对,不行!
2.GetNextItem(hItem,TVGN_ROOT)返回值不对,不行!
3.循环GetParentItem()直到返回NULL,可以,但是太麻烦!请教各位大侠,有什么办法直接准确的获得这个句柄吗??谢谢!

解决方案 »

  1.   

    GetRootItem获得第一个根节点,然后使用GetNextSiblingItem遍历后面的根节点
      

  2.   

    当然你先需要定义一个CTreeCtrl对象来关联到你的TreeView
      

  3.   

    TO : JamesXing(破破) “使用GetNextSiblingItem遍历后面的根节点”CTreeCtrl对象和tree句柄肯定是都有的,你说的办法不能确定我选中的子节点是在哪个根节点下面,如果我要是连所有子节点都遍历的话,那比我上面做过的办法还要麻烦!!
      

  4.   

    HTREEITEM      hItem;hItem = 某个子节点;
    while(hItem != TVI_ROOT)
         hItem = GetParentItem(hItem);
    没试过,不知道行不行
      

  5.   

    3.循环GetParentItem()直到返回NULL,可以,但是太麻烦!就这个吧...麻烦只要写出来了 就成函数,  对人来说就不麻烦了..CPU是不怕麻烦的,
    除非你觉得效率不行了 ,那样做明显影响效率了吗? 应该不会吧.帮你up ~
      

  6.   

    SetItemData() 把根节点保存到子节点中好了
      

  7.   

    哈哈,没仔细看楼主的题,sorry,我也想不到别的了!
    up吧
      

  8.   

    每个节点设置时候都用SetItemData()付值,然后GetItemData()来判断在什么范围内