检查Win32树视图项自动检查所有子项

时间:2009-11-21 00:19:58

标签: winapi treeview visual-c++

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

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

有没有人有设置此方案的经验?我对轮询GUI元素的开销的担忧是否合理?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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

当状态图像发生变化时(即单击复选框时),树控件将发送此通知代码。

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

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

答案 2 :(得分:-1)

以下是MSDN(TreeView :: AfterCheck事件)的最佳方法:

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