ли CTreeCtrl::DeleteItem
также удалить все узла к югу от дерева HTREEITEM
с или я должен рекурсивно пройти по поддерево себя и называть DeleteItem
на каждом из них?ли CTreeCtrl :: DeleteItem также удалить все поддерево элементы узла HTREEITEMs
ответ
Глядя на исходный код MFC для CTreeCtrl::DeleteItem
, он делает это:
_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 когда каждый элемент будет удален.
Таким образом, предоставив обработчик для этого сообщения, вы можете проверить, что дочерние элементы удалены правильно.
MSDN Docs on CTreeCtrl::DeleteItem С, где он говорит If hitem has the TVI_ROOT value, all items are deleted from the tree view control
, я бы сделать вывод, что он будет ало удалять подузлы ...
Я думаю, что это работает только в том случае, если элемент находится на уровне корня. Если элемент находится на дочернем узле (например, вы не укажете TVI_ROOT для своего дескриптора), вам нужно будет повторить его, как показывает пример. Я думаю, это и есть этот ответ. – rrirower
Я НЕ удаляю корень, но поддерево дерева. Я делаю это рекурсивно прямо сейчас, но задавался вопросом, делаю ли я это «трудный путь». – franji1
Кроме того, если он удаляет все элементы поддерева в дополнение к указанному элементу, MSDN заявила бы просто, что сделала это, с возможным замечанием, что «Следовательно, если hitem имеет значение TVI_ROOT, ...». Но поскольку он не указывает, что для всех узлов я предполагаю, что он не удаляет элементы поддерева, а TVI_ROOT является исключением из «простого» поведения. – franji1
- 1. CTreeCtrl не отображает все элементы в узле
- 2. Если метод удаления BST также удаляет поддерево узла?
- 3. Java JNDI Удалить все поддерево LDAP
- 4. Связаны ли все дочерние элементы узла гиперссылки?
- 5. CTreeCtrl SelectItem не выбирает элемент
- 6. Позволяет ли присваивать innerHTML удалить HTML-поддерево?
- 7. Может ли git поддерево содержать поддерево?
- 8. IResultData :: DeleteItem и IResultData :: DeleteAllRsltItems return E_UNEXPECTED
- 9. Silverlight Dataform DeleteItem problem
- 10. Является ли teneo/hibernate возможным удалить поддерево из коробки?
- 11. Как удалить поддерево в языке BST C?
- 12. Slickgrid redisplay grid после deleteItem
- 13. Удалить дублирующие элементы из BST
- 14. Java. Получить поддерево от родительского узла
- 15. Как удалить поддерево B-Tree
- 16. git pull поддерево удаляет все
- 17. Как удалить все атрибуты узла?
- 18. перебрать все элементы пользовательского узла LinkedList
- 19. Выбрать все дочерние элементы узла в scala
- 20. Git удалить все удаленные элементы
- 21. Как удалить все скрытые элементы?
- 22. Удалить все остальные элементы списка
- 23. Идеально ли для узла имен также быть вторичным именем узла?
- 24. Как удалить все элементы ListBox?
- 25. Удалить все элементы из списка
- 26. Swift: удалить все элементы массива
- 27. Удалить все элементы из NSTreeController
- 28. jquery $ .totalStorage - удалить все ключи
- 29. CTreeCtrl Checkbox Состояние дочернего элемента
- 30. Поддерево кратчайшего пути Дерево также является самым коротким деревом?
_So, предоставив обработчик для этого сообщения, вы можете проверить, что дочерние элементы удалены правильно. Я пробовал это, и он рекурсивно удаляет все элементы поддерева – franji1