下面的代码
HTREEITEM hItemRoot = 0;
hItemRoot = GetRootItem();
if (!hItemRoot || !ItemHasChildren(hItemRoot))
hItem = GetChildItem(hItemMatch);
通过跟踪ItemHasChildren(hItemRoot)返回true,也就是有子节点,但是
hItem却返回空,到底是怎么回事

解决方案 »

  1.   

    hItem = GetChildItem(hItemMatch);//这一句是不是写错了?
    hItem = GetChildItem(hItemRoot);//这一句是不是应该这样?
    看MSDN:
    // Delete all of the children of hmyItem.
    if (pmyTreeCtrl->ItemHasChildren(hmyItem))
    {
       HTREEITEM hNextItem;
       HTREEITEM hChildItem = pmyTreeCtrl->GetChildItem(hmyItem);   while (hChildItem != NULL)
       {
          hNextItem = pmyTreeCtrl->GetNextItem(hChildItem, TVGN_NEXT);
          pmyTreeCtrl->DeleteItem(hChildItem);
          hChildItem = hNextItem;
       }
    }
      

  2.   

    if (!hItemRoot || !ItemHasChildren(hItemRoot))不知道是什么逻辑???
    按你这句话的意思是
    如果 没有根节点 或者 有根节点但没有子节点 的时候才执行
    hItem = GetchildItem(hItemMacth) ;
    不知道hItemMacth句柄与hItemRoot有什么联系???
      

  3.   

    extern CTreeCtrl m_tree ;
    HTREEITEM hItemRoot = NULL ;
    hItemRoot = m_tree.GetRootItem();
    if (!hItemRoot) return FALSE;
    else if(m_tree.ItemHasChildren(hItemRoot))
         { 
            HTREEITEM hChild = m_tree.GetChildItem(hItemRoot);
            while(hChild)
            {
                hChild = m_tree.GetNextItem(hChild,TVGN_NEXT); //看看所有的同等级child
            }
          return TRUE;   
       }
     else  return FALSE ;     
      

  4.   

    不知道hItemMacth句柄与hItemRoot有什么联系???
      

  5.   

    忘了hItemMacth = hItemRoot
      

  6.   

    完整的这样
    HTREEITEM hItemRoot = 0;
    hItemRoot = GetRootItem();
    hItemMacth = hItemRoot
    if (!hItemRoot || !ItemHasChildren(hItemRoot))
    hItem = GetChildItem(hItemMatch);
      

  7.   

    hItemRoot = GetRootItem();前面加上对象名
    hItemRoot = ****.GetRootItem();
      

  8.   

    全写错了,应该是
    HTREEITEM hItemRoot = 0, hItemMatch = 0, hItem = 0; hItemRoot = GetRootItem();

    if (!hItemRoot || !ItemHasChildren(hItemRoot))
    return bRet;
    hItemMatch = hItemRoot;
             hItem = GetChildItem(hItemMatch);
      

  9.   

    但就是hItem得到NULL,而ItemHasChildren(hItemRoot)返回true,这是邪了
      

  10.   

    但就是hItem得到NULL,而ItemHasChildren(hItemRoot)返回true,这是邪了
      

  11.   

    他们的类型根本就不一致啊!一个是指针型!一个是BOOL变量!
      

  12.   

    ItemHasChildren(hItemRoot)返回true证明是有子节点
    可hItem = GetChildItem(hItemMatch);
    hItem返回NULL又说明没有子节点,迷惑阿
      

  13.   

    // The pointer to my tree control.
    extern CTreeCtrl* pmyTreeCtrl;
    // The item whose children will be deleted.
    extern HTREEITEM hmyItem;// Delete all of the children of hmyItem.
    if (pmyTreeCtrl->ItemHasChildren(hmyItem))
    {
       HTREEITEM hNextItem;
       HTREEITEM hChildItem = pmyTreeCtrl->GetChildItem(hmyItem);   while (hChildItem != NULL)
       {
          hNextItem = pmyTreeCtrl->GetNextItem(hChildItem, TVGN_NEXT);
          pmyTreeCtrl->DeleteItem(hChildItem);
          hChildItem = hNextItem;
       }
    }
    这是MSDN的例子,你的代码里没有添加 The pointer to my tree control.pmyTreeCtrl;
      

  14.   

    我是在CTreeCtrl派生类里面写的代码