CTreelCtrl的使用大全

本文详细介绍了CTreeCtrl的基础和扩展操作,包括插入节点、获取节点句柄、判断节点状态、设置图标、响应TVN_ITEMEXPANDING消息、遍历树节点等功能,帮助开发者深入理解和使用树控件。
摘要由CSDN通过智能技术生成

目录

 

一 基础操作 

1 插入节点

1)插入根节点

2)插入孩子节点

2 获得节点句柄    

3 判断某节点是否有孩子节点

4 展开或收缩子节点

5 获得第一个孩子节点的句柄 

6 遍历hRoot下一层的所有孩子节点

7  获得某节点上的文字

8 选择某节点,并让其获得焦点

9  清空树控件

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

11 将文件列表中的文件插入树控件中

二 扩展操作

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

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

 3  判断节点是否被扩展过

4   使用 CImageList m_ImageList; 加载位图或图标,并将其与树控件联系在一起,由此便可以设置每个节点的图标

 5  什么时候响应OnItemexpanding 消息

6  设置树控件形式为 TVS_HASBUTTONS|TVS_LINESATROOT 时, 树控件节点前才会出现+ - 号

7  遍历树控件的所有节点

1) 获得根节点句柄

2)遍历所有节点

8 获得某Item节点的全路径

9  获得树中所有叶子节点的父目录

10 利用InsertItem、SetItemData 存放与该节点有关的数字信息 


一 基础操作 

1 插入节点

1)插入根节点

    //插入根节点
    HTREEITEM hRoot;
    CString str=L"ROOT"
    hRoot=nTreeCtrl.InsertItem(str);  
 
    //相当于 
    hRoot=nTreeCtrl.InsertItem(str,TVI_ROOT,TVI_LAST);

2)插入孩子节点

 //添加hRoot节点的孩子节点,并且被添加的节点位于hRoot所有孩子节点的末尾
    HTREEITEM hChild=nTreeCtrl.InsertItem(str,hRoot);
 
    //相当于
    HTREEITEM hChild=nTreeCtrl.InsertItem(str,hRoot,TVI_LAST);

2 获得节点句柄    

//获得根节点
    HTREEITEM hRootItem;
    hRootItem=nTreeCtrl.GetRootItem();
 
 
    //获得当前节点
    HTREEITEM hCurrentItem;
    hCurrentItem=nTreeCtrl.GetSelectedItem();
 
 
    //获得hItem的前一个节点
 
    HTREEITEM hPreItem;
    hPreItem=nTreeCtrl.GetNextItem(hItem,TVGN_PREVIOUS);
 
 
    //获得hItem的下一个节点
    HTREEITEM hNextItem;
    hNextItem=nTreeCtrl.GetNextItem(hItem,TVGN_NEXT);

3 判断某节点是否有孩子节点

//判断某节点是否有孩子节点
    if (nTreeCtrl.ItemHasChildren(hRoot))

4 展开或收缩子节点

//展开
if(nTreeCtrl.ItemHasChildren(hRoot))
    nTreeCtrl.Expand(hParentItem,TVE_EXPAND);

5 获得第一个孩子节点的句柄 

//判断某节点是否有孩子节点
    if (nTreeCtrl.ItemHasChildren(hRoot))
    {
        //获得孩子节点
        HTREEITEM hChild=nTreeCtrl.GetChildItem(hRoot);
 
    }

6 遍历hRoot下一层的所有孩子节点

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

7  获得某节点上的文字

 //获得某节点上的文字
    CString str;
    nTreeCtrl.GetItemText(hRoot);

8 选择某节点,并让其获得焦点

   

首先,TREE控件的样式必须设置为TVS_SHOWSELALWAYS 

   其次: 选择该节点

treeCtrl.SelectItem(hItem);
  最后,设置焦点

    treeCtrl.SetFocus();
Tree控件设置焦点后,会自动将焦点定位到选择的节点上

9  清空树控件

nTreeCtrl.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 将文件列表中的文件插入树控件中

void InsetAllFile( list<CString>& filePathList){
 
 
    CTreeCtrl & nTreeCtrl=((CMyTreeView*)(((CMainFrame*)AfxGetMainWnd())->m_SplitterWnd.GetPane(0,0)))->GetTreeCtrl();
    nTreeCtrl.DeleteAllItems();
 
    list<CString>::iterator it=filePathList.begin();
    HTREEITEM hRoot=NULL;
    CString filePath;
    CString treeRootName=L"根目录";  //所有的文件都在根目录下  即:默认所有的文件都在同一个目录下
 
    while(it!=filePathList.end())
    {
        filePath=*it;  
        
 
 
        if(hRoot==NULL)
            hRoot=nTreeCtrl.InsertItem(treeRootName);  //建立根目录
 
 
 
        if(filePath.Find(treeRootName)==0) // 文件第一层目录与根目录相同,则截去文件第一层目录,文件从第二层目录开始
            filePath=filePath.Right(filePath.GetLength()-treeRootName.GetLength()-1);
 
 
        LoadPicFiles(nTreeCtrl,filePath, hRoot);
 
        it++;
    }
 
}


void LoadPicFiles(CTreeCtrl& nTreeCtrl, CString nFilePath, HTREEITEM nRoot)
{
 
// 判断nPicFolder是目录还是文件
// 如果是文件
//     直接将文件插入到树控件中 nTreeCtrl.InsertItem(nPicFolder,nRoot);
// 如果是目录
//     获取nPicFolder的第一层目录
//     判断nRoot目录下
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值