//调用代码:
m_hRoot = m_TreeCtrl.InsertItem(L"我的电脑");
InsertLogicalDrives(m_hRoot);
InsertDriveDir(m_hRoot);
m_TreeCtrl.Expand(m_hRoot,TVE_EXPAND);
/******************************************************************************
* 作用: 在指定父节点下插入驱动盘下的所有子项
******************************************************************************/
void CMainFrame::InsertDriveDir(HTREEITEM hParent)
{
HTREEITEM hChild = m_TreeCtrl.GetChildItem(hParent);
while(hChild)
{
CString strText = m_TreeCtrl.GetItemText(hChild);
if(strText.Right(1) != L"//")
strText += L"//";
strText += L"*.*";
CFileFind file;
BOOL bContinue = file.FindFile(strText);
while(bContinue)
{
bContinue = file.FindNextFile();
if(!file.IsDots())
{
CString strFileName = file.GetFileName();
m_TreeCtrl.InsertItem(strFileName, hChild);
}
}
hChild = m_TreeCtrl.GetNextItem(hChild, TVGN_NEXT);
file.Close();
}
}
/******************************************************************************
* 作用: 在指定父节点下插入目录下的所有子项
******************************************************************************/
void CMainFrame::AddSubDir(HTREEITEM hParent)
{
CString strPath = GetFullPath(hParent);
if(strPath.Right(1) != "//")
strPath += "//";
strPath += L"*.*";
CFileFind file;
BOOL bContinue = file.FindFile(strPath);
while(bContinue)
{
bContinue = file.FindNextFile();
if( !file.IsDots())
m_TreeCtrl.InsertItem(file.GetFileName(), hParent);
}
}
/******************************************************************************
* 作用: 获取指定节点的全路径
******************************************************************************/
CString CMainFrame::GetFullPath(HTREEITEM hCurrent)
{
CString strTemp;
CString strReturn = L"";
while(hCurrent != m_hRoot)
{
strTemp = m_TreeCtrl.GetItemText(hCurrent);
if(strTemp.Right(1) != "//")
strTemp += L"//";
strReturn = strTemp + strReturn;
hCurrent = m_TreeCtrl.GetParentItem(hCurrent);
}
return strReturn;
}
/******************************************************************************
* 作用: 展开树视图的某一项的响应函数
******************************************************************************/
void CMainFrame::OnItemexpandedTree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
TVITEM item = pNMTreeView->itemNew;
if(item.hItem == m_hRoot)
return;
HTREEITEM hChild = m_TreeCtrl.GetChildItem(item.hItem);
while(hChild)
{
AddSubDir(hChild);
hChild = m_TreeCtrl.GetNextItem(hChild,TVGN_NEXT);
}
*pResult = 0;
}