2014-10-31 2 views

ответ

3

Глядя на исходный код 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 когда каждый элемент будет удален.

Таким образом, предоставив обработчик для этого сообщения, вы можете проверить, что дочерние элементы удалены правильно.

+1

_So, предоставив обработчик для этого сообщения, вы можете проверить, что дочерние элементы удалены правильно. Я пробовал это, и он рекурсивно удаляет все элементы поддерева – franji1

0

MSDN Docs on CTreeCtrl::DeleteItem С, где он говорит If hitem has the TVI_ROOT value, all items are deleted from the tree view control, я бы сделать вывод, что он будет ало удалять подузлы ...

+0

Я думаю, что это работает только в том случае, если элемент находится на уровне корня. Если элемент находится на дочернем узле (например, вы не укажете TVI_ROOT для своего дескриптора), вам нужно будет повторить его, как показывает пример. Я думаю, это и есть этот ответ. – rrirower

+0

Я НЕ удаляю корень, но поддерево дерева. Я делаю это рекурсивно прямо сейчас, но задавался вопросом, делаю ли я это «трудный путь». – franji1

+0

Кроме того, если он удаляет все элементы поддерева в дополнение к указанному элементу, MSDN заявила бы просто, что сделала это, с возможным замечанием, что «Следовательно, если hitem имеет значение TVI_ROOT, ...». Но поскольку он не указывает, что для всех узлов я предполагаю, что он не удаляет элементы поддерева, а TVI_ROOT является исключением из «простого» поведения. – franji1

Смежные вопросы