#include "Vector.h"
/*
存储树信息的结构
*/
typedef struct tagTREEDATA{
int iId; //节点自身的ID号
int iPid; //父节点的ID号
CString sXXX;//节点附带信息
CString sTreeName;//节点名称
}TREEDATA;
typedef CArray<TREEDATA> TREEDATA_ARRAY;
/*
存储建树的节点信息的结构
*/
struct ITEMDATA{
ITEMDATA(HTREEITEM h,DWORD id)
{
hItem= h;
dwID= id;
}
HTREEITEM hItem;//存储构建当前层次的节点,构建下一层次做备用
DWORD dwID; //存储构建当前层次的ID,构建下一层次做备用
};
typedef std::vector<ITEMDATA> VEC_TMPDATA;
/************************************************************************/
/* 构造二叉树 */
/************************************************************************/
VEC_TMPDATA root1,root2;
TREEDATA_ARRAY TreeDataArray;
CTreeCtrl Tree;
void CreateTree()
{
HTREEITEM hRoot = Tree.InsertItem(_T("主目录"),/*没点击显示第一个位图*/0, /*选择后显示第一个位图*/0);
Tree.SetItemState(hRoot, TVIS_BOLD, TVIS_BOLD);
HTREEITEM hItem= NULL;
for (int i=0;i<TreeDataArray.GetSize();i++)
{
if (TreeDataArray[i].iPid==0)
{
hItem= Tree.InsertItem(TreeDataArray[i].sTreeName, 0, 0,hRoot);
//存储附加信息 用下面的方法获取
//CString* pStrUrl;
//pStrUrl = (CString*)m_wndFileView.GetItemData(hItem);
Tree.SetItemData(hItem,(DWORD_PTR)&TreeDataArray[i].sXXX);
root1.push_back(ITEMDATA(hItem,TreeDataArray[i].iId));
}
}
//设置此目录可以扩展开
Tree.Expand(hRoot,TVIS_EXPANDED);
while(root1.size()!=0)
{
AddTree();
}
}
void AddTree()
{
for (int j=0;j<root1.size();j++)
{
for (int i=0;i<TreeDataArray.GetSize();i++)
{
if (TreeDataArray[i].iPid==root1[j].dwID)
{
//设置当前节点的名称 、没选时显示的图片(第一个位图)、选中时显示的图片(第一个位图)、父节点
hItem= Tree.InsertItem(TreeDataArray[i].sTreeName, 0, 0,root1[j].hItem);
//存储附加信息 用下面的方法获取
//CString* pStrUrl;
//pStrUrl = (CString*)m_wndFileView.GetItemData(hItem);
Tree.SetItemData(hItem,(DWORD_PTR)&TreeDataArray[i].sXXX);
root2.push_back(ITEMDATA(hItem,TreeDataArray[i].iId));
}
}
//设置此目录可以扩展开
Tree.Expand(root1[j].hItem,TVIS_EXPANDED);
}
root1.clear();
root1= root2;
root2.clear();
}