【框架-MFC】CTreeCtrl(chenlu-2):创建二叉树

#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();
}


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值