确定是否取消选择树视图中所有节点的最安全方法?

时间:2015-01-12 03:54:52

标签: c++ c winapi treeview selection

我需要在树视图控件中取消选择所有选定的节点。

正在搜索MSDN documentation我找到TreeView_SelectItem宏。

文档说明:

  

如果hitem参数为NULL,则控件设置为没有选定项。

这解决了我问题的第一部分 - >取消选择所有节点。

我的问题是我在TVM_GETNEXTITEM message返回值备注部分中读到的以下部分:

  

返回值

     

如果成功,则返回项目的句柄。 对于大多数情况,邮件会返回NULL值以指示错误。有关详细信息,请参阅“备注”部分。

     

说明

     

如果要检索的项目是树的根节点,则此消息将返回NULL。例如,如果在树视图的根节点的第一级子节点上将此消息与TVGN_PARENT标志一起使用,则该消息将返回NULL。

使用TreeView_SelectItem取消选择所有节点后,我可以使用哪个宏/消息来检查是否有任何项目被选中?

我必须100%确定返回的结果不是是错误的结果。

2 个答案:

答案 0 :(得分:1)

使用

HTREEITEM hItem = (HTREEITEM)::SendMessage(hWnd, TVM_GETNEXTITEM, TVGN_CARET, 0);

"错误"不能在这个参数组合中出现。

关于文档:从我的角度来看,如果有父节点,则询问根节点是不是错误。它只是没有,所以它返回NULL。这里的错误意味着"函数返回NULL,因为你要求的东西不存在......"但即使你得到的结果也可以处理。

我可以认为这个函数没有错误可能会阻止在这里返回无效结果,如果窗口存在且系统没有被无效指针写入或类似命令破坏。

答案 1 :(得分:1)

TreeView_SelectItem()有自己的返回值:

  

返回值

     

如果成功则返回 TRUE ,否则返回 FALSE

如果TreeView_SelectItem(hwndTV, NULL)返回TRUE,则保证您不会在该时刻选择任何项目。如果您要检查TreeView以查看是否有任何项目被选中并且碰巧找到了一个项目,那么这意味着有人被允许在您取消选择项目后选择项目。因此,在准备好之前,请确保您的代码不允许新选择。