本帖最后由 lin98666lin 于 2013-11-25 17:58:42 编辑

解决方案 »

  1.   

    不要用 SelectItem,用 SetItemState 来直接修改状态(TVIS_SELECTED)为了以后能更好的应用和开发,最好是继承 CTreeCtrl 自己写一个类,拦截 WM_CONTENTMENU 消息
    按照消息返回的坐标 HitTest 定位项目,定位项目为 -1 则退出
    然后用 SetItemState 来设置项目状态(状态为 TVIS_SELECTED)
    然后弹出你需要的菜单
      

  2.   


    SetItemState 不行,listview 用这个是可以的,treeview不行。我发现是因为我加了 singleexpand 的原因,去掉这个属性,就没事了。现在已近去掉了,单击的时候 我进行展开和收拢,然后收拢其他兄弟节点,基本达到了效果
      

  3.   

    之前也是用SelectItem,不会出现你说的展开/收缩情况啊    CPoint point;
        GetCursorPos(&point);
        CPoint pt(point);
        m_tree.ScreenToClient(&point);
        HTREEITEM hItem = m_tree.HitTest(point);
        if(hItem)
        {
            m_tree.SelectItem(hItem);        if(m_tree.GetItemData(hItem)==0)
            {
                CMenu m;
                m.LoadMenu(IDR_MENU3);
                m.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,pt.x,pt.y,this);
                m.DestroyMenu();
            }
        }