MFC 怎么保存CTreeCtrl里面的项,然后删除,再恢复?
+MyTreeNO1|__+NO2|___NO3上面的m_Tree(控件绑定了变量)里面项先把m_Tree里的所有项保存到变量然后删除m_Tree所有项然后Sleep(1...
+MyTreeNO1
|__+NO2
|___NO3
上面的m_Tree(控件绑定了变量)里面项
先把m_Tree里的所有项保存到变量
然后
删除m_Tree所有项
然后Sleep(1000);
再把变量内容通过m_Tree显示回来
怎么做? 展开
|__+NO2
|___NO3
上面的m_Tree(控件绑定了变量)里面项
先把m_Tree里的所有项保存到变量
然后
删除m_Tree所有项
然后Sleep(1000);
再把变量内容通过m_Tree显示回来
怎么做? 展开
1个回答
展开全部
先设计一个保存信息的结构体
struct TreeNode
{
CString txt;
HTREEITEM handle;
CTypedPtrList<TreeNode*> child;
};
这个结构体与CTreeCtrl的结构具有很好的对应关系
在保存和恢复时都根据宽度优先原则遍历,利用队列CTypedPtrList<TreeNode*> unresolve 来记录尚未扩展的节点。
保存的过程:
1. 得到根的HTREEITEM,新建TreeNode 节点作为根节点,并填充txt和handle数据,将节点加入unresolve 队列
2. 如果 unresolve 队列不为空则循环
3. 从 unresolve 队列的头部得到一个节点Parent
4. 根据节点Parent的handle,利用GetChildItem和GetNextItem函数,得到控件中的子HTREEITEM;
5. 新建对应TreeNode,加入Parent的child列表,同时将节点加入unresolve的尾部
6. 返回第2步
恢复过程
1. 根据 根节点 的txt,添加到CTreeCtrl中,并在handle中记录HTREEITEM;将根的TreeNode加入 unresolve 队列
2. 如果 unresolve 队列为空,则循环结束
3. 取出 unresolve 队列的第一个节点Parent
4. 遍历Parent的所有child,根据child节点的txt和Parent的handle,添加到CTreeCtrl中,同时记录child添加到控件时的HTREEITE;将child节点加到 unresolve 队列尾部
5. 返回第2步
struct TreeNode
{
CString txt;
HTREEITEM handle;
CTypedPtrList<TreeNode*> child;
};
这个结构体与CTreeCtrl的结构具有很好的对应关系
在保存和恢复时都根据宽度优先原则遍历,利用队列CTypedPtrList<TreeNode*> unresolve 来记录尚未扩展的节点。
保存的过程:
1. 得到根的HTREEITEM,新建TreeNode 节点作为根节点,并填充txt和handle数据,将节点加入unresolve 队列
2. 如果 unresolve 队列不为空则循环
3. 从 unresolve 队列的头部得到一个节点Parent
4. 根据节点Parent的handle,利用GetChildItem和GetNextItem函数,得到控件中的子HTREEITEM;
5. 新建对应TreeNode,加入Parent的child列表,同时将节点加入unresolve的尾部
6. 返回第2步
恢复过程
1. 根据 根节点 的txt,添加到CTreeCtrl中,并在handle中记录HTREEITEM;将根的TreeNode加入 unresolve 队列
2. 如果 unresolve 队列为空,则循环结束
3. 取出 unresolve 队列的第一个节点Parent
4. 遍历Parent的所有child,根据child节点的txt和Parent的handle,添加到CTreeCtrl中,同时记录child添加到控件时的HTREEITE;将child节点加到 unresolve 队列尾部
5. 返回第2步
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询