我用VC已经做好了一个树型控件,向windows资源管理器一样.并且能用鼠标右键单击,并弹出一个快捷菜单.想在菜单中实现对树型控件节点的增加和删除.找了很多资料,都是对树型控件拖动的.我比较笨,希望能给出代码或参考资料.

解决方案 »

  1.   

    很简单
    CTreeCtrl::GetSelectedItem();
    CTreeCtrl::DeleteItem
      

  2.   

    调用这几个函数就行了,可查MSDN帮助
    pmyTreeCtrl->GetSelectedItem
    pmyTreeCtrl->DeleteItem
    pmyTreeCtrl->InsertItem
      

  3.   

    这个树的结构是这样的
    先建父节点 HTREEITEM root = m_TreeCtrl.InsertItem("VCKBASE",0,0);
    HTREEITEM subroot1=m_TreeCtrl.InsertItem("程序员社区",1,1,root);
    HTREEITEM subroot2=m_TreeCtrl.InsertItem("文档中心",1,1,root);
    HTREEITEM subroot3=m_TreeCtrl.InsertItem("代码仓库",1,1,root);
    HTREEITEM subroot4=m_TreeCtrl.InsertItem("工具和资源",1,1,root);
    HTREEITEM subroot5=m_TreeCtrl.InsertItem("客服中心",1,1,root);
    HTREEITEM subroot6=m_TreeCtrl.InsertItem("个人专栏",1,1,root);
    然后建子节点
    m_TreeCtrl.InsertItem("开发论坛",1,1,subroot1);
    m_TreeCtrl.InsertItem("开发联盟",1,1,subroot1);
    m_TreeCtrl.InsertItem("人才交流",1,1,subroot1);
    m_TreeCtrl.InsertItem("用户注册",1,1,subroot1);
    m_TreeCtrl.InsertItem("VCity",1,1,subroot1);

    m_TreeCtrl.InsertItem("在线杂志",1,1,subroot2);
    m_TreeCtrl.InsertItem("个人专辑",1,1,subroot2);
    m_TreeCtrl.InsertItem("论坛精华",1,1,subroot2);
    m_TreeCtrl.InsertItem("酷库",1,1,subroot2);
    m_TreeCtrl.InsertItem("所有文章",1,1,subroot2);
    m_TreeCtrl.InsertItem("所有代码",1,1,subroot3);

    m_TreeCtrl.InsertItem("程序工具箱",1,1,subroot4); m_TreeCtrl.InsertItem("程序工具箱",1,1,subroot5);
    m_TreeCtrl.InsertItem("用户注册",1,1,subroot5);
    m_TreeCtrl.InsertItem("修改信息",1,1,subroot5);
    m_TreeCtrl.InsertItem("取回密码",1,1,subroot5);
    m_TreeCtrl.InsertItem("问题解答",1,1,subroot5);
    m_TreeCtrl.InsertItem("投稿",1,1,subroot5);
    m_TreeCtrl.InsertItem("联系我们",1,1,subroot5);

    m_TreeCtrl.SelectItem(root);
    m_TreeCtrl.Expand(root, TVE_EXPAND);
    m_TreeCtrl.Expand(subroot1, TVE_EXPAND);
    m_TreeCtrl.Expand(subroot2, TVE_EXPAND);
    m_TreeCtrl.Expand(subroot3, TVE_EXPAND);
    m_TreeCtrl.Expand(subroot4, TVE_EXPAND);
    m_TreeCtrl.Expand(subroot5, TVE_EXPAND);
    return 0;
    鼠标右击弹出快捷菜单
    oid MyTree::OnRButtonDown(UINT nFlags, CPoint point) 
    {

    CMenu menu;
      VERIFY(menu.LoadMenu(IDR_MENU1));
      CMenu *pPopup=menu.GetSubMenu(0);
      ASSERT(pPopup !=NULL);
      POINT gpoint;
      GetCursorPos(&gpoint);
      DWORD SelectionMade=pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_NONOTIFY|TPM_RETURNCMD,
      gpoint.x,gpoint.y,this);
      switch(SelectionMade)
      {
    case IDM_ADD: 
             case IDN_DEL:
    }
    就是不知道switch里怎么写增加和删除节点的代码.
      

  4.   

    哦。那要先判断点击的是哪个节点。
    用HTREEITEM GetSelectedItem( );获取选中的节点。然后DeleteItem就删除了。
      

  5.   

    不是这样做吧,TrackPopupMenu函数返回的是BOOL,你应该在响应菜单的消息处理函数中,去获得你选择的项目,在进行增加或删除。
      

  6.   

    是没错的,他是指定了TPM_RETURNCMD:你可以在前面先,HITTEST一下,如果有就选中这个项,这样可以右键直接点击就可以选中这个项CPoint point;
    GetCursorPos(&gpoint);
    ScreenToClient(&gpoint);

    UINT uFlags;
    HTREEITEM hItem = HitTest(gpoint, &uFlags);
    if (hItem)
    {
    SelectItem(hItem);
    DWORD SelectionMade=pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_NONOTIFY|TPM_RETURNCMD,
      gpoint.x,gpoint.y,this);
      switch(SelectionMade)
      {
    case IDM_ADD: 
    InsertItem("aaa",hItem,hItem);
    break;
             case IDN_DEL:
    DeleteItem(hItem);
    break;
    }}
      

  7.   

    噢.后面哪儿弹出菜单前应该还要加上 ClientToScreen(&gpoint),:)