CTreeCtrl::DeleteItem
是否也会删除所有节点的子树HTREEITEM
,还是我必须自己递归遍历子树并在每个子树上调用DeleteItem
?
答案 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
,我推断它会删除子节点......