CTreeCtrl类把数据都放在哪了?不会是系统保存这些东西吧

YZ 2003-01-08 09:34:58
一整天就研究CTreeCtrl这个类了,很奇怪,我到现在也没明白它把数据保存到什么地方了。比如下面这句:

m_tree.InsertItem(_T("我的电脑"), 0, 0, TVI_ROOT, TVI_LAST);

“我的电脑”这几个字最后存在哪了呢?难道是操作系统替我申请了内存保存这些字吗?
...全文
23 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
verybigbug 2003-01-10
  • 打赏
  • 举报
回复
倒!

编译器会为你设计树结构? I服了U。

数据和界面分离的Java类 TreeView你可以看看,SysTreeView32本来就
实现了数据和界面的分离,否则你怎么可能用TreeView显示目录结构或者
人事系统。SysTreeView32只有界面没有数据。界面也必须管理自己的数据。
比如最简单的SetWindowText,你认为这个Text是谁为你保存的,当然是
界面自己管理了这个Text的内存。
YZ 2003-01-10
  • 打赏
  • 举报
回复
I服了YOU :) ,不过我保留我的意见,虽然你说得可能有些道理。但使用这种系统控件写出的程序是不易移植的,因为win平台和linux平台的界面元素差异是很大的。

如果让我设计SysTreeView32,我会只让它负责界面显示,树结构的构建和数据存储我会推给编译器,让编译器厂商设计更优秀的树结构算法。
verybigbug 2003-01-10
  • 打赏
  • 举报
回复
倒!

控件必须管理自己显示的数据,因为控件是提供给其他人用的。
至于用户利用该控件来显示用户数据实现数据和界面的分离和
控件管理自己的数据一点冲突都没有。

比如:TreeView控件内部管理一个树型表,用户利用TreeView显示
一个目录结构时,TreeView根本没有管理这个目录结构,目录结构
是由用户管理的,这就是数据和界面的分离了,用户将目录结构通过
ListBox也可以显示就说明了数据和控件的分离。

至于在MFC中大家用CView显示Doc中的内容的工作方式,在这里的
CView就不是一个控件了,因为这个CView不能脱离CDoc工作,也就是
说你不能直接提供这个CView给其他不用你的CDoc的用户。你没有将
CView和CDoc分离。

作为一个真正的独立的控件,应该是一个自己内部管理自己显示数据的
而不依赖其他外部数据的独立体。它不会限制外部数据的管理。

shesh 2003-01-09
  • 打赏
  • 举报
回复
CTreeCtrl

本身有个链表和一堆类变量.

那东西都存在里面了.

LookSail 2003-01-09
  • 打赏
  • 举报
回复
???
YZ 2003-01-09
  • 打赏
  • 举报
回复
我打算做那种Windows和Linux两种平台版本的软件,所以我需要将存在平台差异的部分尽量独立出来,这样做移植时能轻松一些,但Windows控件把数据和界面元素都封装在一块了,所以就很麻烦:)
demetry 2003-01-09
  • 打赏
  • 举报
回复
那你要移植到什么环境下呢?^_^
你可以自己看一下MFC的源代码是怎么调用API的
YZ 2003-01-09
  • 打赏
  • 举报
回复
明白了:) 3x !

不过由控件自身管理数据我觉得不太好,用这种控件写出的程序不好移植。
verybigbug 2003-01-09
  • 打赏
  • 举报
回复
晕倒!

CTreeCtrl类只不过简单封装了一下SysTreeView32控件而已。
保存数据都是由SysTreeView32负责,你如果用SDK写过自己的
控件就不会有这些问题了。

控件自己内部必须负责管理数据的。
flyycyu 2003-01-09
  • 打赏
  • 举报
回复
up
YZ 2003-01-09
  • 打赏
  • 举报
回复
我感觉不是这样,CTreeCtrl的类定义中没有任何变量,它的父类CWnd中也没有可用于存储节点的链表变量,我看这些数据并不是CTreeCtrl或CWnd类负责存储的。

我跟踪过InsertItem()函数,它只是简单的向自身的窗口发送了一条消息,而自身窗口的窗口消息处理函数并没有处理该消息,而是将其转发给了操作系统缺省窗口消息处理函数,所以我怀疑是系统保存了这些数据,但我又觉得这有些荒唐,为什么该由用户管理的数据却由系统待办呢,百思不得其解:(
lizmei001 2003-01-09
  • 打赏
  • 举报
回复
yes , i see also.
aabb0281 2003-01-08
  • 打赏
  • 举报
回复
up
demetry 2003-01-08
  • 打赏
  • 举报
回复
en.

15,980

社区成员

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

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