我有一个Treeview控件,每个项目都有一个复选框。在根级别我有大约100个项目,每个这样的项目还有100个项目,因此遍历树需要大约1-2秒的时间。我想减少那个时间。所以这是我的问题,如何在不遍历树视图控件的情况下获取treeview控件中已检查项目的数量?
我查了msdn。我们有“Treeview_GetCount”,但它提供了treeview控件中的项目总数。我知道我可以从root开始并递归遍历以检查树视图中每个项目的状态,最后得到已检查状态的项目数。
替代方案我们可能有一个变量(类成员或全局),并在检查项目时递增它,并在取消选中项目时递减它,最终会在一个实例中为我提供多个项目。
还有其他更好的方法吗?
答案 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。为了完整性,请处理空格键并为所选项目发送相同的通知。