CTreeCtrl 控件使用

1. 插入节点
插入根节点
    HTREEITEM hRoot;
    CString str=L"ROOT"
    hRoot=nTreeCtrl.InsertItem(str);  
    //相当于 
    hRoot=nTreeCtrl.InsertItem(str,TVI_ROOT,TVI_LAST);
插入孩子节点
    //添加hRoot节点的孩子节点,并且被添加的节点位于hRoot所有孩子节点的末尾
    HTREEITEM hChild=nTreeCtrl.InsertItem(str,hRoot);
    //相当于
    HTREEITEM hChild=nTreeCtrl.InsertItem(str,hRoot,TVI_LAST);

2. 获得节点句柄
    //获得根节点
    HTREEITEM hRootItem = nTreeCtrl.GetRootItem();

    //获得当前节点
    HTREEITEM hCurrentItem = nTreeCtrl.GetSelectedItem();

    //获得hItem的前一个节点
    HTREEITEM hPreItem = nTreeCtrl.GetNextItem(hItem,TVGN_PREVIOUS);

    //获得hItem的下一个节点
    HTREEITEM hNextItem = nTreeCtrl.GetNextItem(hItem,TVGN_NEXT);

    // 获取hItem的第一个子节点
    HTREEITEM hChild = tree.GetNextItem(hItem, TVGN_CHILD);
    HTREEITEM hChild = tree.GetChildItem(hItem, TVGN_CHILD);

    // 获取hItem的父节点
    HTREEITEM hParent = tree.GetNextItem(hItem, TVGN_PARENT);
    HTREEITEM hParent = tree.GetParentItem(hItem);

    // 获取hItem前一个兄弟节点
    HTREEITEM hPreSibling = tree.GetPrevSiblingItem(hItem);
    // 获取hItem后一个兄弟节点
    HTREEITEM hNextSibling = tree.GetNextSiblingItem(hItem);

3. 判断某节点是否有孩子节点
    BOOL bHaveChild = tree.ItemHasChildren(hItem);

4. 展开或收缩子节点
    tree.Expand(hItem,TVE_EXPAND);        // 展开
    tree.Expand(hItem,TVE_COLLAPSE);    // 闭合

6. 遍历hRoot下一层的所有孩子节点
    //判断某节点是否有孩子节点
    if (nTreeCtrl.ItemHasChildren(hRoot))
    {
        //获得孩子节点
        HTREEITEM hChild=nTreeCtrl.GetChildItem(hRoot);
        //遍历hRoot下一层的所有孩子节点
        while(hChild)
        {
            hChild=nTreeCtrl.GetNextItem(hChild,TVGN_NEXT);
        }
    }

8. 选择某节点,并让其获得焦点
    首先,TREE控件的样式必须设置为TVS_SHOWSELALWAYS 
    其次: 选择该节点
        treeCtrl.SelectItem(hItem);
    最后,设置焦点
        treeCtrl.SetFocus();
    Tree控件设置焦点后,会自动将焦点定位到选择的节点上

9. 清空树控件
    tree.DeleteAllItems();

10. 将指定目录下的文件插入节点

void InsertPath(CString path, HTREEITEM hRoot, CTreeCtrl& ctrl)
{
    CFileFind nFindFile;
    CString str=L"";
    CString nPicFileName=L"";
    BOOL IsExist=FALSE;
    HTREEITEM hSubItem;
 
    nPicFileName.Format(L"%s\\*.*",path);
    IsExist = nFindFile.FindFile(nPicFileName);
    while (IsExist)
    {
        IsExist = nFindFile.FindNextFile();
        if(nFindFile.IsDots())
            continue;
        nPicFileName = nFindFile.GetFileName();
 
        //路径
        if(nFindFile.IsDirectory())
        {
            hSubItem = ctrl.InsertItem(nPicFileName,hRoot);
            InsertPath(nFindFile.GetFilePath(),hSubItem,ctrl);
        }
        else
        {
            //文件
            str = nPicFileName.Right(4);
            if(!str.CompareNoCase(_T(".jpg")) || !str.CompareNoCase(_T(".tif")))
            {
                ctrl.InsertItem(nPicFileName,hRoot);
            }
        }
    }
    nFindFile.Close();
}

void LoadPath(CString path) //path为指定目录   此函数的作用为将path目录下的文件插入树控件中
{
    CTreeCtrl& ctrl = GetTreeCtrl();
    ASSERT(ctrl); 
    ctrl.DeleteAllItems();
    HTREEITEM hRoot = ctrl.InsertItem(path);
    InsertPath(path,hRoot,ctrl);
    ctrl.Expand(hRoot,TVE_EXPAND);
}

11. 响应TVN_ITEMEXPANDING  消息时   如何获得将要展开或收缩的那一个节点的句柄

void CLeftView::OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult)
{
    LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代
    HTREEITEM htree=pNMTreeView->itemNew.hItem; // 这个就是 将要被扩展或收缩节点的句柄
}

12. 怎么知道CTreeCtrl的一个节点是展开的还是收缩着的

BOOL bExpand = (GetItemState(hItem, TVIS_EXPANDED) & TVIS_EXPANDED) == TVIS_EXPANDED;

13. 判断节点是否被扩展过

BOOL bExpanded = (tree.GetItemState(hItem, TVIS_EXPANDEDONCE) & TVIS_EXPANDEDONCE) != 0 ;

14. 使用CImageList加载位图或图标,并将其与树控件联系在一起

    CImageList m_ImageList;
    m_ImageList.Create(12,12,ILC_COLORDDB | ILC_MASK, 3, 1);
    HICON hAdd = ::LoadIcon(::AfxGetInstanceHandle(), (LPCTSTR)IDI_ADD);
    HICON hRemove = ::LoadIcon(::AfxGetInstanceHandle(), (LPCTSTR)IDI_REMOVE);
    HICON hLeaf = ::LoadIcon(::AfxGetInstanceHandle(), (LPCTSTR)IDI_LEAF);
    m_ImageList.Add(hAdd);
    m_ImageList.Add(hRemove);
    m_ImageList.Add(hLeaf);
    tree.SetImageList(&m_ImageList,TVSIL_NORMAL);  // 树控件和图像列表相连
    m_treeCtrl.SetItemImage(htree,0,0)   //设置节点的图标

15. 什么时候响应OnItemexpanding 消息
当节点第一次被展开时,才响应此消息。也就是说:当以开后该节点再展开或收缩时,便不再响应此消息了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值