关于在CTreeCtrl的节点上保存数据的问题?

yangki 2004-05-12 09:25:03
一个MainFrame嵌入两个view,左面是TreeCtrlView,右面是ListCtrlView。需要在左面的树的每个节点上保存一系列数据,点击某的节点,根据这个节点中的数据,在右面的视图中展现与其数据对应的内容。
现在的问题:
左面的树是我解析XML生成的,我要把XML文件中每个node的属性值保存到对应的TreeCtrl的节点上,CTreeCtrl的方法SetItemData只能提set一个地址,当这个地址指向的对象的生命周期结束以后,那么在节点上取数据的操作就会出错了。我需要在整个程序的运行期间可以随时访问树节点的信息,请问有什么好得办法吗?或者有哪位仁兄做过类似的程序,请指点一下。
...全文
140 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangki 2004-05-12
  • 打赏
  • 举报
回复
好,谢谢各位!
wanggh771024 2004-05-12
  • 打赏
  • 举报
回复
你可以在循环向树节点上添加数据(比如把需要保存的数据保存在一个结构体里面)的时候,New一个该结构体的指针变量,然后在循环体里把要保存的在该指针指向的结构体里,
同时系统会把该结构体变量压如栈里,然后用SetItemData方法把结构体指针保存在每一个树节点上,这样就不会出现在其他地方因保存数据生命周期的问题而取不到节点上的数据的情况,不过New声明的指针一定要手工释放.
快乐鹦鹉 2004-05-12
  • 打赏
  • 举报
回复
可以将XML中每个节点的内容保存到一个new分配出来的空间中去。这样就不会有生命期的问题了,除非你自己删除。然后将空间地址用SetItemData设置到树的节点中去。
flyelf 2004-05-12
  • 打赏
  • 举报
回复
dynamically allocate the data
gufengduyu 2004-05-12
  • 打赏
  • 举报
回复
使用SetItemData向CTreeCtrl加入数据没有问题
只不过你每次set的数据应该用new 从堆上分配,在你的程序最后退出时才将CTreeCtrl关联的所有数据释放掉

也就是说将XML文件中每个node的属性值定义成类或者结构
class node{
....
....
}

node *pNode
pNode = new node;

SetItemData(hItem,(DWORD)pNode );
cpunion 2004-05-12
  • 打赏
  • 举报
回复
可以new出来并存放在一个vector中,程序退出时全部delete.
figer 2004-05-12
  • 打赏
  • 举报
回复
SetItemData,对象的生命周期你可以自己控制。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧