遍历目录树 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);
}
}
}