我已经看了CSDN里面的所有相关文章,很多朋友提出了一些方法,但好像都不行。
做出来的效果就如同VC左边的workspace那样,右键单击一个不同的根,可以弹出不同的菜单出来。右键单击根里面的一些子选项,又可以弹出不同的菜单来。我自己觉得好像只能用OnContextMenu函数实现,其他都不行。但具体操作望高手解答。

解决方案 »

  1.   

    if (GetItemData(hSelect)==11)
    {
    CMenu  menu,* pSubMenu; //¶¨ÒåÏÂÃæÒªÓõ½µÄcmenu¶ÔÏó
    menu.LoadMenu(IDR_POP_TREE_CIRCUIT); //×°ÔØ×Ô¶¨ÒåµÄÓÒ¼ü²Ëµ¥
    pSubMenu = menu.GetSubMenu(0); //»ñÈ¡µÚÒ»¸öµ¯³ö²Ëµ¥£¬ËùÒÔµÚÒ»¸ö²Ëµ¥±ØÐëÓÐ×Ӳ˵¥ 
    CPoint oPoint; //¶¨ÒåÒ»¸öÓÃÓÚÈ·¶¨¹â±êλÖõÄλÖÃ
    GetCursorPos(&oPoint); //»ñÈ¡µ±Ç°¹â±êµÄλÖã¬ÒÔ±ãʹµÃ²Ëµ¥¿ÉÒÔ¸úËæ¹â±ê 
    pSubMenu->TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this);//ÔÚÖ¸¶¨Î»ÖÃÏÔʾµ¯³ö²Ëµ¥ 
    }
      

  2.   

    if (GetItemData(hSelect)==11)
    {
    CMenu  menu,* pSubMenu; //定义下面要用到的CMenu对象
    menu.LoadMenu(IDR_POP_TREE_CIRCUIT); //装载自定义的右键菜单
    pSubMenu = menu.GetSubMenu(0); //获取第一个弹出菜单,所以第一个菜单必须有子菜单
    CPoint oPoint; //定义一个用于确定光标位置的位置
    GetCursorPos(&oPoint); //获取当前光标的为止,以便使得菜单一刻跟随光标
    pSubMenu->TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this);//在指定位置显示弹出菜单
    }
      

  3.   

    可以响应在树型空间的OnRClick事件中并且,给每层的Tree Item定义一个标号,如,第一层用SetItemData() == 11;
      

  4.   

    不行啊,放在OnRClick里面一点用都没有
      

  5.   

    你怎么放的,贴出来看看
    也就是OnRClick里,你写的什么?
      

  6.   

    HTREEITEM hCountry = m_tree.InsertItem(_T("厂站0"),1,1,TVI_ROOT,TVI_LAST);
    m_tree.SetItemData(hCountry,10);     //这两句是在OnCreate里面创建一个树根。
    void CMyTreeView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    // TODO: Add your control notification handler code here
    *pResult = 0;    CPoint ptCursor;
        ::GetCursorPos(&ptCursor);
        CPoint ptTmp = ptCursor;   
        m_tree.ScreenToClient(&ptCursor);
       HTREEITEM hCurSelItem ;
      m_tree.SelectItem(hCurSelItem);
     CMenu   menuPopup;   
    menuPopup.LoadMenu(IDR_TREEMENU);   
    CMenu*   pSubMenu   =   menuPopup.GetSubMenu(0);   
    if(m_tree.GetItemData(hCurSelItem ==10)
    {
            
    pSubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,ptTmp.x,ptTmp.y,this);
    }}
      

  7.   

    我是从CTreeCtrl中,派生出来一个树控件,然后由Create产生。
    OnRclick写在派生类中
      

  8.   

    /****
     HTREEITEM hCurSelItem ;
      m_tree.SelectItem(hCurSelItem);
    *********/有问题,应使用TreeView_HitTest获得当前的hTreeItem
      

  9.   

    我是在对框中放一树控件的:
     
    void CXXXDlg::OnNMRclickTree(NMHDR *pNMHDR, LRESULT *pResult)
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; CPoint pt;
         GetCursorPos(&pt);     UINT   flags;
         m_treectrl.ScreenToClient(&pt);     HTREEITEM hItemOne = m_treectrl.HitTest(pt,&flags);
         if (hItemOne && m_treectrl.GetParentItem(hItemOne) == m_treectrl.GetRootItem()) AfxMessageBox(L"right click "); *pResult = 0;
    }
      

  10.   

    正在做一个项目,和LZ有相似的需求,看了各位的帖子,收获不少,谢谢大家O(∩_∩)O~
      

  11.   

    我是从CTreeCtrl中,派生出来一个树控件,然后由Create产生。 
    OnRclick写在派生类中