CTreeCtrl :: DeleteItem是否也删除所有节点的子树HTREEITEM

时间:2014-10-31 14:30:49

标签: visual-c++ mfc

CTreeCtrl::DeleteItem是否也会删除所有节点的子树HTREEITEM,还是我必须自己递归遍历子树并在每个子树上调用DeleteItem

2 个答案:

答案 0 :(得分:3)

查看CTreeCtrl::DeleteItem的MFC源代码,它执行此操作:

_AFXCMN_INLINE BOOL CTreeCtrl::DeleteItem(_In_ HTREEITEM hItem)
{ 
    ASSERT(::IsWindow(m_hWnd)); 
    return (BOOL)::SendMessage(m_hWnd, TVM_DELETEITEM, 0, (LPARAM)hItem); 
}

现在看documentation of TVM_DELETEITEM,它说下面的内容(我的重点):

  

从树视图控件

中删除项及其所有子项

这意味着递归删除 是不必要的,但我必须承认我没有对它进行测试 - 文档可能会产生误导(因为它有时是)。一种测试方法是在文档中注明这一行:

  

父窗口在收到TVN_DELETEITEM通知代码时   每个项目都被删除。

因此,通过为该消息提供处理程序,您可以验证是否正确删除了子项。

答案 1 :(得分:0)

MSDN Docs on CTreeCtrl::DeleteItem所说的If hitem has the TVI_ROOT value, all items are deleted from the tree view control,我推断它会删除子节点......