Win32 c ++:如何在treeview控件中获取已检查项的数量

时间:2012-07-11 12:28:37

标签: c++ winapi treeview

我有一个Treeview控件,每个项目都有一个复选框。在根级别我有大约100个项目,每个这样的项目还有100个项目,因此遍历树需要大约1-2秒的时间。我想减少那个时间。所以这是我的问题,如何在不遍历树视图控件的情况下获取treeview控件中已检查项目的数量?

我查了msdn。我们有“Treeview_GetCount”,但它提供了treeview控件中的项目总数。我知道我可以从root开始并递归遍历以检查树视图中每个项目的状态,最后得到已检查状态的项目数。

替代方案我们可能有一个变量(类成员或全局),并在检查项目时递增它,并在取消选中项目时递减它,最终会在一个实例中为我提供多个项目。

还有其他更好的方法吗?

2 个答案:

答案 0 :(得分:1)

不幸的是,您必须遍历调用TreeView_GetCheckState的树视图以获取此类信息。或者,您可以在插入项目时将检查状态与lParam TVITEM相关联,但这仍然需要遍历。

遍历控件有什么问题?如果由于某种原因它太慢,您可以始终将数字存储在您更新的变量中。

答案 1 :(得分:0)

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