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

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

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);
   }
  }
}

posted @ 2019-06-07 16:56  沙漠驼铃  阅读(162)  评论(0编辑  收藏  举报