Исправлено форматирование текста. — SchweinDeBurg
У меня тоже проблемы с DeleteAllItems. При вызове DeleteAllItems при заполненном дереве (да и пустом тоже) последующие вставки элементов в дерево проявляются глюки. Элементы вроде как вставляются, но в дереве не отображаются, если кликать мышкой в том месте, где должны быть элементы, то они (невидимые) будут выделяться.
Вот код:
hRootCategory = TreeCtrl.InsertItem(_T("root"), 0, 0, NULL, TVI_SORT); // сколько угодно раз
...
TreeCtrl.DeleteAllItems();
hRootCategory = TreeCtrl.InsertItem(_T("root"), 0, 0, NULL, TVI_SORT); // теперь глюки
Кстати, код товарища _devdi_ тоже не заработал у меня (Win2k Pro SP4, IE 6 SP1, VS 7.1).
Можно все это обойти конечно удалением поэлементно вот так (как в msdn):
HTREEITEM hCurrent = TreeCtrl.GetNextItem(hRootCategory, TVGN_PREVIOUS);
TVITEM item;
TCHAR szText[1024];
while (hCurrent != NULL)
{
item.hItem = hCurrent;
item.mask = TVIF_TEXT | TVIF_HANDLE;
item.pszText = szText;
item.cchTextMax = 1024;
hCurrent = TreeCtrl.GetNextItem(hCurrent, TVGN_PREVIOUS);
if (TreeCtrl.GetItem(&item))
TreeCtrl.DeleteItem(item.hItem);
}
// до сюда удаляет все кроме первого элемента
// добавляются отныне элементы прекрасно
hCurrent = TreeCtrl.GetNextItem(hCurrent, TVGN_PREVIOUS);
item.hItem = hCurrent;
item.mask = TVIF_TEXT | TVIF_HANDLE;
item.pszText = szText;
item.cchTextMax = 1024;
TreeCtrl.DeleteItem(item.hItem); // удаляем последний элемент, и опять глючит
Уже три дня угробил, помогите! Пробовал переименовать тот первый элемент, но не получается даже получить его имя, а этот код не меняет имени:
TreeCtrl.SetItemText(hCurrent, "New value");
Но наверное можно победить DeleteAllItems()? MS ее просто использует одним вызовом и ничего более. Спасибо большое заранее.