【问题标题】:Checking a Win32 Tree View Item Automatically Checks all Child Items检查 Win32 树视图项会自动检查所有子项
【发布时间】:2009-11-21 00:19:57
【问题描述】:

我正在使用 Win32 API 和 MS Visual C++ 6 来构建目录结构的树形视图,并带有与每个树形视图项关联的复选框。我的目标是能够检查父文件夹,并让它自动检查其所有关联的子文件夹。

但是,通过 MSDN 挖掘后,我无法找到正在选中的项目的控制通知消息,只有当项目被选中时。我曾考虑使用选择通知消息来提示程序轮询该项目并查看其当前的“检查状态”是否为真,但我不确定 checkedselected 可以通过这种方式捆绑在一起,并且我还担心当用户在一个非常大的目录中移动时不断轮询项目相关的开销。

有没有人有设置这个场景的经验?我对轮询 GUI 元素开销的担忧是否合理?

【问题讨论】:

    标签: winapi treeview visual-c++


    【解决方案1】:

    没有任何通知。不过,您可以自己编写。只需handle mouse click and use hittest to see if the mouse cursor is on the state image。为了完整起见,请处理空格键并为所选项目发送相同的通知。

    【讨论】:

      【解决方案2】:

      从 Windows Vista 开始,Microsoft 引入了NM_TVSTATEIMAGECHANGING 和相应的NMTVSTATEIMAGECHANGING 结构。我不确定为什么 Tree View 通知中没有记录这一点,而是在 General Control Reference 部分中记录。

      此通知代码由树形控件在状态图像更改时(即单击复选框时)发送。

      NMTVSTATEIMAGECHANGING 结构有一个 iOldStateImageIndexiNewStateImageIndex 字段,用于指定相应的更改。此信息可用于确定将显示的新状态图像(1 为未选中框,2 为选中框)

      Vista 还引入了暗淡、部分和排除检查,但目前我不确定这些检查是如何由状态图像索引表示为上述两个基本情况的。

      【讨论】:

        【解决方案3】:

        这是 MSDN 的最佳方式(TreeView::AfterCheck Event):

        http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.aftercheck(v=vs.110).aspx

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-09
          • 1970-01-01
          • 1970-01-01
          • 2010-12-08
          • 1970-01-01
          • 1970-01-01
          • 2021-08-29
          • 1970-01-01
          相关资源
          最近更新 更多