我基本上希望获得与 List-View 控件相同的虚拟性能。使用 List-View 控件,您可以设置 ItemCount,然后在 LVN_GETDISPINFO 通知中填写项目滚动可见的信息。
现在,Tree-View 提供的虚拟功能非常适合非常深的树,因此您只需在节点展开后添加项目(通过 TVN_ITEMEXPANDING),并且一旦项目滚动可见,TVN_GETDISPINFO 可用于填写项目信息。但是,如果您有一个“始终扩展”的两级树(仅用于设计问题),其中 TVN_ITEMEXPANDING 没有任何用处,并且只想在项目可见时添加它们,该怎么办。问题是,没有 SetItemCount() 或类似的东西已经调整了树的大小。
在我的情况下,项目信息(文本、图像、选定图像)的填充不是昂贵的部分,但项目的插入(都在一个级别)是。
一种选择是只插入可见的项目加上一个不可见的项目,一旦不可见的项目可见(在 TVN_GETDISPINFO 中检测到),我会再插入一些,依此类推。但是我向下滚动的次数越多,滚动条就会越小,我觉得这很奇怪。
除了绘制自己的控件之外,还有其他想法可以实现我想要的吗?
整棵树看起来像这样,几乎是一个列表,只是我喜欢树的样子。
RootNode
|
|--Item 1
|--Item 2
|--Item 3
|--Item 4
|--Item 5
|--Item 6
|--Item 7
...
|__Item 1000