15,979
社区成员
发帖
与我相关
我的任务
分享
// in ".h"
// CString m_TreePath;
// HTREEITEM m_hTiFound;
void CTreeCtrlDlg::OnButton1()
{// read Tree Path
m_TreeCtrl.DeleteAllItems();
//
CStdioFile f;
f.Open("TreePath.txt",CFile::modeRead);
CString tmp;
while(f.ReadString(tmp))
{
if(tmp.IsEmpty()) continue;
int at=tmp.ReverseFind('\\');
if(at==-1)
{
if(m_TreeCtrl.GetRootItem())
{// has a root !
AfxMessageBox(tmp + " can't be a Second root item,only one root item allowed!");
}
else
{
HTREEITEM hroot=m_TreeCtrl.InsertItem(tmp,6,0,TVI_ROOT);
//afxDump << m_TreeCtrl.GetItemText(hroot) << "\n";
}
continue;
}
else
{
CString tmpPath=tmp.Left(at);
at++;
CString tmpInsert=tmp.Right(tmp.GetLength()-at);
m_hTiFound=0;
FindTreeItem(0,tmpPath);
if(m_hTiFound)
{
m_TreeCtrl.InsertItem(tmpInsert,6,0,m_hTiFound);
}
else
{
AfxMessageBox(tmpPath + " Tree path not found !");
}
}
}
f.Close();
}
写 文件
//
void CTreeCtrlDlg::WalkTreeCtrl(HTREEITEM hParent,CStdioFile &file)
{
HTREEITEM hChild;
CString str;
// enter all child
if(hParent==0) hChild=m_TreeCtrl.GetRootItem();
else hChild=m_TreeCtrl.GetChildItem(hParent);
//
while (hChild)
{// need path
GetTreePath(hChild);
m_TreePath += "\n";
if(file) file.WriteString((LPCSTR)m_TreePath);
if(m_TreeCtrl.ItemHasChildren(hChild)) WalkTreeCtrl(hChild,file);
hChild=m_TreeCtrl.GetNextSiblingItem(hChild);
}
}
////////////////////////////////
void CTreeCtrlDlg::OnButton2()
{// save tree path to txt
CStdioFile f;
f.Open("TreePath1.txt",CFile::modeCreate | CFile::modeWrite);
WalkTreeCtrl(0,f);
f.Close();
}
//
void CTreeCtrlDlg::WalkTreeCtrl(HTREEITEM hParent)
{
HTREEITEM hChild;
CString str;
// enter all child
if(hParent==0) hChild=m_TreeCtrl.GetRootItem();
else hChild=m_TreeCtrl.GetChildItem(hParent);
//
while (hChild)
{
#if 1 // need path
GetTreePath(hChild);
afxDump << m_TreePath << "\n";// 在这里把 path 写入 TXT文件 !
#else // no path
str=m_TreeCtrl.GetItemText(hChild);
// output
// afxDump << str << "\n";
#endif
if(m_TreeCtrl.ItemHasChildren(hChild)) WalkTreeCtrl(hChild);
hChild=m_TreeCtrl.GetNextSiblingItem(hChild);
}
}
//
void CTreeCtrlDlg::GetTreePath(HTREEITEM hItem)
{
CString Path;
CString tmp;
while (hItem)
{
tmp=m_TreeCtrl.GetItemText(hItem);
Path=tmp+"\\"+Path;
// get parent
hItem=m_TreeCtrl.GetParentItem(hItem);
}
// delete last '\'
if(Path.Right(1)=="\\") Path=Path.Left(Path.GetLength()-1);
// output Path
// afxDump << Path << "\n";
m_TreePath=Path;
return;
}
// in ".h"
// CString m_TreePath;
// HTREEITEM m_hTiFound;
void CTreeCtrlDlg::OnButton1()
{
m_TreeCtrl.DeleteAllItems();
//
CStringArray aStr;
aStr.Add("R");
aStr.Add("R\\C1");
aStr.Add("R\\C2");
aStr.Add("R\\C1\\G1");
aStr.Add("R\\C1\\G2");
aStr.Add("R\\C2\\G2");
//
for(int i=0;i<aStr.GetSize();i++)
{//
CString tmp=aStr[i];
int at=tmp.ReverseFind('\\');
if(at==-1)
{
m_TreeCtrl.InsertItem(tmp,6,0,TVI_ROOT);
continue;
}
else
{
CString tmpPath=tmp.Left(at);
at++;
CString tmpInsert=tmp.Right(tmp.GetLength()-at);
m_hTiFound=0;
FindTreeItem(0,tmpPath);
if(m_hTiFound)
{
m_TreeCtrl.InsertItem(tmpInsert,6,0,m_hTiFound);
}
else
{
AfxMessageBox("Tree path not found !");
}
}
}
}
// not return anything !
void CTreeCtrlDlg::FindTreeItem(HTREEITEM hParent,CString &SearchPath)
{
HTREEITEM hChild;
// enter all child
if(hParent==0) hChild=m_TreeCtrl.GetRootItem();
else hChild=m_TreeCtrl.GetChildItem(hParent);
//
while (hChild)
{
GetTreePath(hChild);
if(SearchPath==m_TreePath)
{
m_hTiFound=hChild;// global !
break;
}
if(m_TreeCtrl.ItemHasChildren(hChild)) FindTreeItem(hChild,SearchPath);
hChild=m_TreeCtrl.GetNextSiblingItem(hChild);
}
}