2012-08-05 114 views
2

我正在使用WIN32 APIs实现一个项目,其中我需要某些基于某些数据的运行时树视图项目可见/不可见由用户输入。我做了一些工作,发现我可以在树视图控件中添加/删除项目,但无法找到任何设置项目可见或不可见的地方(我发现了一些可以通过MFC完成的示例)。如何使用Win32 api设置树视图项目为可见/不可见

我在寻找将它们设置为可见/不可见的方式,这很简单,因为当我添加一个项目时,它需要大量的后端计算,重复的添加或删除操作会导致性能问题。我只想在每个树视图项目中只进行一次计算。

其中一个解决方案,我认为,如果设置树视图项目是不可能的,只是简单地存在树视图项目的链接列表,并且仅添加/删除需要可见的项目/无形。

请告诉我是否可以将树状视图项目的状态设置为可见/不可见,如果是,那该怎么办?如果不是,可以采用其他备用解决方案吗?

+0

Imho,你没有提到另一种方式(添加/删除)。 – Maximus 2012-08-05 21:17:33

+0

保留树视图项目中显示的数据的单独缓存。如果您需要重新创建之前已删除的项目,则可以便宜地从缓存中检索数据。根据您的数据,您可能可以使用简单的'std :: map'作为缓存,或者您可能需要某种树。 – arx 2012-08-05 21:56:38

+0

您是否尝试使用'TVM_GETITEMRECT'消息来勾勒“隐藏”项目上的边界矩形?请注意,您需要挂钩其他消息才能防止选择“隐藏”项目。 – Jay 2012-08-06 00:43:58

回答

5

标准的TreeView控件没有任何节点可见性的概念。添加/删除节点是唯一的选择。您将不得不维护节点显示的数据的单独链接列表缓存(无论如何,您应该这样做,以便将您的UI逻辑与业务逻辑分开)。否则,您需要编写自己的TreeView控件,或者找到适合您需求的第三方实现。

相关问题