首页 > 其他 > 详细

遍历目录树 2007-08-09 20:56

时间:2019-06-07 17:38:14      阅读:99      评论:0      收藏:0      [点我收藏+]

这是我个人认为写的最好的最精练的代码,它的功能是保存目录树中被选中的目录。如下:

std::vector<CString> vecPath;                               // 存放路径的容器

CTreeCtrl m_TreeCtrl;                                          // 目录树控件

TVINSERTSTRUCT tvInsert;                                // 目录项的属性

以上要初始化哦。

HTREEITEM m_Tree = m_TreeCtrl.InsertItem(&tvInsert)           // 目录项

 

/**
*  功能:获取当前目录绝对路径

*  参数:HTREEITEM  类型当前选中的项

*  返回类型:CString 类型,表示路径
**/
CString GetFullPath(HTREEITEM hCurrent)
{
     CString strTemp;
     CString strReturn ;
     while(hCurrent != m_Tree)
     {
             strTemp = m_TreeCtrl.GetItemText(hCurrent);
             if(strTemp.Right(1) != _T("\\"))
             {

                  strTemp += _T("\\");

             }
             strReturn = strTemp  + strReturn;
             hCurrent = m_TreeCtrl.GetParentItem(hCurrent);
     }
     return strReturn;
}

/**
*  功能:保存选中项的路径

*  参数:HTREEITEM  类型当前选中的项

*  返回类型:void类型

**/

void InsertString(HTREEITEM hItem)
{
 
  CString path = GetFullPath(hItem);
  if (!path.IsEmpty())
  {
       vecPath.push_back(path);
  }
}

/**
*  功能:遍历当前选中的目录项

*  参数:HTREEITEM  类型当前选中的项

*  返回类型:void类型

**/

void FindTrueInsert(HTREEITEM hItem)
{
 BOOL bSelectd = m_TreeCtrl.GetCheck(hItem);
 if (bSelectd)
    {
   InsertString(hItem);
 }
 else
 {
   HTREEITEM child = m_TreeCtrl.GetChildItem(hItem);
   while (child)
   {
    FindTrueInsert(child);
    child = m_TreeCtrl.GetNextSiblingItem(child);
   }
  }
}

遍历目录树 2007-08-09 20:56

原文:https://www.cnblogs.com/lu-ping-yin/p/10988604.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!