void buildtree(CString strpath,HTREEITEM hi,CTreeCtrl &htree)
{
CFileFind ff;
CString strfile,strdir;
BOOL findit;
HTREEITEM hcuritem;
CString strw(strpath);
strw+=_T("\\*.*");
findit=ff.FindFile(strw);
while (findit)
{
findit=ff.FindNextFile();
if (ff.IsDirectory()&&!ff.IsDots())
{
strdir=ff.GetFilePath();
strfile=ff.GetFileTitle();
hcuritem = htree.InsertItem(strfile,hitem);
buildtree(strdir,hcuritem,htree);
}
}
}
// CTreeViewDlg message handlers
BOOL CTreeViewDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
TCHAR path[MAX_PATH];
GetCurrentDirectory(MAX_PATH,path);
buildtree(path,NULL,m_mytree2);
这个不会出错,但也什么都没有m_mytree2,所以请高手来看看,错误在哪里,谢谢
高手顺路给个TreeCtrl使用的Demo吧,小弟vc新人,谢谢
4 个解决方案
#1
给你我封装的2个函数
HTREEITEM SearchText(HTREEITEM hRoot,LPWSTR RootText) //查找指定 root 下的itemtext
{
//如果hRoot = NULL,指定hRoot为Tree的根
if (hRoot == NULL)
{
hRoot = GetRootItem();
return NULL;
}
//如果hRoot = NULL,返回NULL
//判断hRoot是否符合条件,如果符合,返回hRoot
if (GetItemText(hRoot).Compare(RootText) == 0)
{
return hRoot;
}
//如果hRoot没有子节点,返回NULL
if (ItemHasChildren(hRoot) == FALSE)
{
return NULL;
}
//递归查找hRoot的所有子节点
HTREEITEM hRes = NULL;
HTREEITEM hItem = GetChildItem(hRoot);
while (hItem)
{
hRes = SearchText(hItem, RootText); //查以hItem为根的枝
if (hRes != NULL) //如果在以hItem为根的枝里找到,返回结果
{
return hRes;
}
else //否则,查找与hItem同级的下一个枝
{
hItem = GetNextSiblingItem(hItem);
}
} // end of while(hItem != NULL, has next item)
return NULL;
}
HTREEITEM SearchRoot(HTREEITEM hRoot,LPWSTR RootText) //查找 整个tree下的itemtext 第一个参数填入根节点
{
HTREEITEM hItemB;
HTREEITEM hItemA = GetNextItem(hRoot,TVGN_NEXT);
if(this->SearchText(hRoot,RootText)==NULL && hItemA !=NULL)
{
while(hItemA)
{
hItemB=this->SearchText(hItemA,RootText);
if(hItemB != NULL)
{
return hItemB;
}
else
{
hItemA = SearchRoot(hItemA,RootText);
//return 0;
}
}
}
else
{
hItemB=this->SearchText(hRoot,RootText);
return hItemB;
}
return 0;
}
HTREEITEM SearchText(HTREEITEM hRoot,LPWSTR RootText) //查找指定 root 下的itemtext
{
//如果hRoot = NULL,指定hRoot为Tree的根
if (hRoot == NULL)
{
hRoot = GetRootItem();
return NULL;
}
//如果hRoot = NULL,返回NULL
//判断hRoot是否符合条件,如果符合,返回hRoot
if (GetItemText(hRoot).Compare(RootText) == 0)
{
return hRoot;
}
//如果hRoot没有子节点,返回NULL
if (ItemHasChildren(hRoot) == FALSE)
{
return NULL;
}
//递归查找hRoot的所有子节点
HTREEITEM hRes = NULL;
HTREEITEM hItem = GetChildItem(hRoot);
while (hItem)
{
hRes = SearchText(hItem, RootText); //查以hItem为根的枝
if (hRes != NULL) //如果在以hItem为根的枝里找到,返回结果
{
return hRes;
}
else //否则,查找与hItem同级的下一个枝
{
hItem = GetNextSiblingItem(hItem);
}
} // end of while(hItem != NULL, has next item)
return NULL;
}
HTREEITEM SearchRoot(HTREEITEM hRoot,LPWSTR RootText) //查找 整个tree下的itemtext 第一个参数填入根节点
{
HTREEITEM hItemB;
HTREEITEM hItemA = GetNextItem(hRoot,TVGN_NEXT);
if(this->SearchText(hRoot,RootText)==NULL && hItemA !=NULL)
{
while(hItemA)
{
hItemB=this->SearchText(hItemA,RootText);
if(hItemB != NULL)
{
return hItemB;
}
else
{
hItemA = SearchRoot(hItemA,RootText);
//return 0;
}
}
}
else
{
hItemB=this->SearchText(hRoot,RootText);
return hItemB;
}
return 0;
}
#2
给个Email我给你发个例子吧
#3
huangjacky@163.com
3q u 2!
3q u 2!
#4
不好意思,昨天在家里没有,那个例子在公司,我已经发了,注意查收哦!
#1
给你我封装的2个函数
HTREEITEM SearchText(HTREEITEM hRoot,LPWSTR RootText) //查找指定 root 下的itemtext
{
//如果hRoot = NULL,指定hRoot为Tree的根
if (hRoot == NULL)
{
hRoot = GetRootItem();
return NULL;
}
//如果hRoot = NULL,返回NULL
//判断hRoot是否符合条件,如果符合,返回hRoot
if (GetItemText(hRoot).Compare(RootText) == 0)
{
return hRoot;
}
//如果hRoot没有子节点,返回NULL
if (ItemHasChildren(hRoot) == FALSE)
{
return NULL;
}
//递归查找hRoot的所有子节点
HTREEITEM hRes = NULL;
HTREEITEM hItem = GetChildItem(hRoot);
while (hItem)
{
hRes = SearchText(hItem, RootText); //查以hItem为根的枝
if (hRes != NULL) //如果在以hItem为根的枝里找到,返回结果
{
return hRes;
}
else //否则,查找与hItem同级的下一个枝
{
hItem = GetNextSiblingItem(hItem);
}
} // end of while(hItem != NULL, has next item)
return NULL;
}
HTREEITEM SearchRoot(HTREEITEM hRoot,LPWSTR RootText) //查找 整个tree下的itemtext 第一个参数填入根节点
{
HTREEITEM hItemB;
HTREEITEM hItemA = GetNextItem(hRoot,TVGN_NEXT);
if(this->SearchText(hRoot,RootText)==NULL && hItemA !=NULL)
{
while(hItemA)
{
hItemB=this->SearchText(hItemA,RootText);
if(hItemB != NULL)
{
return hItemB;
}
else
{
hItemA = SearchRoot(hItemA,RootText);
//return 0;
}
}
}
else
{
hItemB=this->SearchText(hRoot,RootText);
return hItemB;
}
return 0;
}
HTREEITEM SearchText(HTREEITEM hRoot,LPWSTR RootText) //查找指定 root 下的itemtext
{
//如果hRoot = NULL,指定hRoot为Tree的根
if (hRoot == NULL)
{
hRoot = GetRootItem();
return NULL;
}
//如果hRoot = NULL,返回NULL
//判断hRoot是否符合条件,如果符合,返回hRoot
if (GetItemText(hRoot).Compare(RootText) == 0)
{
return hRoot;
}
//如果hRoot没有子节点,返回NULL
if (ItemHasChildren(hRoot) == FALSE)
{
return NULL;
}
//递归查找hRoot的所有子节点
HTREEITEM hRes = NULL;
HTREEITEM hItem = GetChildItem(hRoot);
while (hItem)
{
hRes = SearchText(hItem, RootText); //查以hItem为根的枝
if (hRes != NULL) //如果在以hItem为根的枝里找到,返回结果
{
return hRes;
}
else //否则,查找与hItem同级的下一个枝
{
hItem = GetNextSiblingItem(hItem);
}
} // end of while(hItem != NULL, has next item)
return NULL;
}
HTREEITEM SearchRoot(HTREEITEM hRoot,LPWSTR RootText) //查找 整个tree下的itemtext 第一个参数填入根节点
{
HTREEITEM hItemB;
HTREEITEM hItemA = GetNextItem(hRoot,TVGN_NEXT);
if(this->SearchText(hRoot,RootText)==NULL && hItemA !=NULL)
{
while(hItemA)
{
hItemB=this->SearchText(hItemA,RootText);
if(hItemB != NULL)
{
return hItemB;
}
else
{
hItemA = SearchRoot(hItemA,RootText);
//return 0;
}
}
}
else
{
hItemB=this->SearchText(hRoot,RootText);
return hItemB;
}
return 0;
}
#2
给个Email我给你发个例子吧
#3
huangjacky@163.com
3q u 2!
3q u 2!
#4
不好意思,昨天在家里没有,那个例子在公司,我已经发了,注意查收哦!