有一块数据,是树结构存放的。
一个父节点可能对应了n个字节点。
所有节点都读取出来了,个数可以得到,m。
节点数据结构大概是struct NODE
{
DWORD dwParent;
DWORD dwThis;
DWORD dwData;
}
现在我想利用MFC的TreeCtrl控件来显示这块数据。有几个疑问
1.由于条件限制,我只能一块一块读取节点,最困难的地方是,读取出来的节点是乱序的,也就是说,插入了一个父节点后,又可能读取到这个节点的父节点。
2.不知道是不是需要先对节点中的父节点号进行排序。
3.有没有更好的实现方法,更高的效率
一个父节点可能对应了n个字节点。
所有节点都读取出来了,个数可以得到,m。
节点数据结构大概是struct NODE
{
DWORD dwParent;
DWORD dwThis;
DWORD dwData;
}
现在我想利用MFC的TreeCtrl控件来显示这块数据。有几个疑问
1.由于条件限制,我只能一块一块读取节点,最困难的地方是,读取出来的节点是乱序的,也就是说,插入了一个父节点后,又可能读取到这个节点的父节点。
2.不知道是不是需要先对节点中的父节点号进行排序。
3.有没有更好的实现方法,更高的效率
因为dwThis是唯一的,节点数目也得到了。我就用了个数组来存放TreeCtrl所有节点的句柄。
hItem[dwThis] = InsertItem("节点的值", , hItem[根节点句柄], hItem[dwParent]);
但是发现,各个文件夹节点都是混乱的,很多孙子文件夹都插入到了根节点中,我感觉我的方法应该每问题吧这里进入下一个环节了。节点分为了2个类型,A,B。其实可以理解成文件管理器。我希望把文件夹在TREE里显示,文件在旁边的LIST里显示。但是文件管理器中,展开某个文件夹节点,会调用相关函数去读取系统。我希望将前面已经读取出来的信息缓存到TREE里并且不显示,当展开这个文件夹节点,直接将这个节点对应的缓冲区的内容显示出来,应该如何实现呢。
UINT mask;
HTREEITEM hItem;
UINT state;
UINT stateMask;
LPTSTR pszText;
int cchTextMax;
int iImage;
int iSelectedImage;
int cChildren;
LPARAM lParam;
} TVITEM, FAR *LPTVITEM;
注意到红色的部分了么?每个节点都是可以存用户的参数的,你把你要显示的数据放在这里面,等到要显示的时候就取出来就行了。
但是我的一个节点可能会包含几千几万个子节点,我能想到的方法就是将这些子节点放进数组,将这个数组和lparam参数进行绑定,但是这样会不会低效
是否有更高效的方法么