【问题标题】:How to set Tree View item as visible/invisible using Win32 api如何使用 Win32 api 将树视图项目设置为可见/不可见
【发布时间】:2012-08-05 19:46:18
【问题描述】:

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

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

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

请告诉我是否可以将树视图项的状态设置为可见/不可见,如果可以,那么如何设置?如果不是,还有什么其他替代解决方案?

【问题讨论】:

  • 恕我直言,您没有提到其他方式(添加/删除)。
  • 保留树视图项中显示的数据的单独缓存。如果您需要重新创建以前已删除的项目,您可以廉价地从缓存中检索数据。根据您的数据,您可能可以使用简单的std::map 进行缓存,或者您可能需要某种树。
  • 您是否尝试过挂钩TVM_GETITEMRECT 消息以将“隐藏”项目上的边界矩形归零?请注意,您需要挂钩其他消息以防止选择“隐藏”项目。

标签: c++ c winapi treeview


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2014-03-21
    • 2015-12-17
    相关资源
    最近更新 更多