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显示回来

怎么做?
展开
 我来答
百度网友6eab688
2012-08-29 · TA获得超过4691个赞
知道大有可为答主
回答量:962
采纳率:50%
帮助的人:947万
展开全部
先设计一个保存信息的结构体
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步
百事牛
2024-10-22 广告
百事牛是共享提供商,我们提供可靠有效的服务,适当合理的授权费有利于的继续更新优化。同样的事情,同样的方法,百事牛团队十年磨一剑,始终至聚焦在密码恢复领域,深耕于此,我们已研制出有别于其他公司的算法和运算模式, 百事牛的暴力模式加入了分布式点... 点击进入详情页
本回答由百事牛提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式