想区分根节点和子节点,但实现不了,求教
根节点右键实现新建,子节点右键实现删除
谢谢!       
         HTREEITEM   Hitem; 
Hitem=m_TreeCtrl.GetSelectedItem(); 
if(Hitem==NULL) 


CMenu   Menu; 
Menu.CreatePopupMenu(); 
Menu.AppendMenu(MF_STRING,ID_NEW, "新建 ");  
CPoint   pt; 
::GetCursorPos(&pt); 
    Menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_RETURNCMD,pt.x,pt.y,this);
}
else
{
CMenu   Menu; 
Menu.CreatePopupMenu(); 
Menu.AppendMenu(MF_STRING,ID_DEL, "删除 ");  
CPoint   pt; 
::GetCursorPos(&pt); 
        Menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_RETURNCMD,pt.x,pt.y,this);
}

解决方案 »

  1.   

    可以去寻找当前节点的父节点,如果返回NULL,说明没有父节点,则当前节点肯定是根节点了
      

  2.   

    根节点可以通过GetRootItem获取
    子节点就通过GetChildItem
    如果没有子节点就是子节点
      

  3.   

    在补充一些代码:
    HTREEITEM Hitem;  
    Hitem=m_TreeCtrl.GetSelectedItem();
    HTREEITEM hParentItem = TreeCtrl.GetParentItem(Hitem);
    if (hParentItem == NULL)  //为根节点
    {
    ......
    }
    else          //为子节点
    {
    ......
    }
      

  4.   

    谢谢大家!
    我想问下5楼的 TreeCtrl 
    我运行的时候出现这样的问题,我用的Vc2006,这个是怎么回事?
    CTreeCtrl' : illegal use of this type as an expression
      

  5.   

     我用CTreeCtrl.GetParentItem(Hitem);的时候出现错误
    error C2275: 'CTreeCtrl' : illegal use of this type as an expression
      

  6.   

    这个错误属于语法错误,对不起,因为没有在VC环境下写,出了点笔误。不能用CTreeCtrl,应该是下面这样:
    HTREEITEM hParentItem = m_TreeCtrl.GetParentItem(Hitem);
      

  7.   

    我把这句这样改后if(hParentItem == TVI_ROOT) 
    全部删除
    但如果执行
    if(hParentItem == NULL) 的话全部是新建
    请高手看下是哪里出错了
    我初始化的时候用的是TVI_ROOT,是不是有影响?
      

  8.   

    谢谢 Jobobo
    我已经弄好了
    HTREEITEM   Hitem; 
    Hitem=m_TreeCtrl.GetSelectedItem(); 
    HTREEITEM hParentItem = m_TreeCtrl.GetParentItem(Hitem);
    CMenu   Menu; 
    Menu.CreatePopupMenu(); 
    if(hParentItem == NULL) 

    Menu.AppendMenu(MF_STRING,ID_NEW, "新建 ");   }
    else
    {

    Menu.AppendMenu(MF_STRING,ID_DEL, "删除 ");  

    }
    CPoint   pt; 
    ::GetCursorPos(&pt); 
            Menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_RETURNCMD,pt.x,pt.y,this);
      

  9.   

    顶顶顶顶顶顶顶顶>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      

  10.   

    呵呵,这个具体原因我就说不清了,可能是你程序里什么地方逻辑有问题,你在用Debug设断点调试一下看看
      

  11.   


    // NM_RCLICK消息响应函数void CXXXDlg::OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    // TODO: Add your control notification handler code here
    #define ID_MENUITEM 234

    CPoint pt1, pt2;
    GetCursorPos(&pt1);
    pt2 = pt1; m_tree.ScreenToClient(&pt1); HTREEITEM hItem = m_tree.HitTest(pt1);
    if(NULL != hItem)
    {
    m_tree.SelectItem(hItem);
    } if(hItem)
    {
    CString strText(_T(""));
    if(m_tree.GetRootItem() == hItem)
    {
    strText = _T("New");
    }
    else
    {
    strText = _T("Delete");
    }

    CMenu menu;
    menu.CreatePopupMenu();
    menu.AppendMenu(MF_STRING, ID_MENUITEM, strText);

    menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RETURNCMD, pt2.x, pt2.y, this);
    menu.Detach();
    } *pResult = 0;
    }
      

  12.   

    谢谢 VisualEleven
    问题解决!