TreeCtrl

TreeCtrl
1.获取当前选择的节点名

CPoint point;
GetCursorPos(&point); // 当前鼠标坐标
m_tree.ScreenToClient( &point);
HTREEITEM hTest=m_tree.HitTest(point, &nFlag);
if(hTest)
{
    m_tree.SelectItem(hTest);
    CString strx,str=m_tree.GetItemText(hTest);
    AfxMessageBox(str);
}

2.TREECTRL加节点图标

step1: 创建位图资源IDB_BITMAP1、IDB_BITMAP2(假设为16x16)
step3: 添加类成员 CImageList m_ImageList;

step3: OnInitDialog()
       {
m_imageList.Create(16, 16, ILC_COLORDDB | ILC_MASK, 0, 1);

CBitmap bm1, bm2;
  
bm1.LoadBitmap(IDB_BITMAP1);
bm2.LoadBitmap(IDB_BITMAP2);

m_imageList.Add(&bm1, RGB(192, 192, 192));
m_imageList.Add(&bm2, RGB(192, 192, 192));

m_tree.SetImageList(&m_imageList, TVSIL_NORMAL);
       }
step4:在插入节点时指定图标
m_tree.InsertItem(str1,0,0,hItem1);//参数2:图标索引;参数3:选中节点时的图标索引
m_tree.InsertItem(str2,1,1,hItem2);

3.展开具有2级子节点的树

HTREEITEM hc=m_tree.GetChildItem(hroot);
m_tree.Expand(hroot,TVE_EXPAND);
m_tree.Expand(hc,TVE_EXPAND);
while((hc=m_tree.GetNextItem(hc,TVGN_NEXT))!=NULL)
    m_tree.Expand(hc,TVE_EXPAND);

4.右键编辑TREECTRL节点文本

(1)响应右键消息
void CForTestDlg::OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
      // TODO: Add your control notification handler code here
      m_tree.ModifyStyle(NULL,TVS_EDITLABELS);      //设置编辑风格
      HTREEITEM hItem=m_tree.GetSelectedItem();
      m_tree.EditLabel(hItem);

      *pResult = 0;
}
(2)响应TVN_BEGINLABELEDIT消息
void CForTestDlg::OnEndlabeleditTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
      TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
      // TODO: Add your control notification handler code here
      if(pTVDispInfo->item.pszText!=NULL)          //未取消编辑
          m_tree.SetItemText(pTVDispInfo->item.hItem,pTVDispInfo->item.pszText);

      *pResult = 0;
}
(3)
void CForTestDlg::OnOK()
{
       SetFocus(); //响应ENTER键
       return;
}

1.GetParentItem取得父节点   
    2.GetChildItem判断父节点是否有子节点   
    3.GetNextItem依次取出所有子节点,加一个计数   
        判断每次取出的节点和当前节点是否是同一节点
      
      
        是第一个节点,你看一下csdn中的例题就知道了!   
    
    //     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;   
          }   
    }   
    
//插入数据

HTREEITEM hParent = m_TreeCtrl.InsertItem(_T("Root"),TVI_ROOT,TVI_LAST);
HTREEITEM hChild1 = m_TreeCtrl.InsertItem(_T("Child1"),hParent);
HTREEITEM hChild2 = m_TreeCtrl.InsertItem(_T("Child2"),hParent);

//展开树

m_TreeCtrl.SetItemState(hParent,TVIS_EXPANDED,TVIS_EXPANDED);或
m_TreeCtrl.Expand(hParent,TVE_EXPAND);(注:第一种一开始好像无法选中子项)

//取得当前选中的Item

HTREEITEM hSel = m_TreeCtrl.GetSelectedItem();
m_TreeCtrl.InsertItem(_T("aaa"),hSel);             //在选中项下插入新的Item
m_TreeCtrl.SetRedraw(TRUE);                        //刷新

HTREEITEM hParent = m_TreeCtrl.GetRootItem();      //定位到根目录
m_TreeCtrl.InsertItem(_T("Item"),hParent);         //在根目录下插入新项

//查找指定的Item

CString str = _T("Child1");
HTREEITEM hParent = m_TreeCtrl.GetRootItem();
while (hParent!=NULL)
{
    if (strcmp(m_TreeCtrl.GetItemText(hParent),str)==NULL)       //找到
    {
     break;
    }
    else
    {
     hParent = m_TreeCtrl.GetNextVisibleItem(hParent);        //查找下一Item
    }
}

//动态创建一树型控件

DWORD dwStyle = WS_CHILD |WS_VISIBLE | WS_BORDER | TVS_HASBUTTONS |TVS_HASLINES;
m_Tree.Create(dwStyle,rcTree,this,0x00016);
m_Tree.InsertItem(_T("Root"));

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值