Копирование элемента на новое место
Операция копирования достаточна проста, но все
же она здесь приводится. В конце вызывается
виртуальная функция, которая обеспечивает
своевременное обновление всей внутренней
информации. Все это сделано для обеспечения
расширяемости.
HTREEITEM CTreeCtrlX::CopyItem( HTREEITEM hItem, HTREEITEM htiNewParent,
HTREEITEM htiAfter /*= TVI_LAST*/ )
{
TV_INSERTSTRUCT tvstruct;
HTREEITEM hNewItem;
CString sText;
// берем информацию источника
tvstruct.item.hItem = hItem;
tvstruct.item.mask = TVIF_CHILDREN | TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
GetItem(&tvstruct.item);
sText = GetItemText( hItem );
tvstruct.item.cchTextMax = sText.GetLength();
tvstruct.item.pszText = sText.LockBuffer();
// Вставляем элемент в заданное место
tvstruct.hParent = htiNewParent;
tvstruct.hInsertAfter = htiAfter;
tvstruct.item.mask = TVIF_IMAGE| TVIF_SELECTEDIMAGE | TVIF_TEXT;
hNewItem = InsertItem(&tvstruct);sText.ReleaseBuffer();
// Теперь копируем данные и состояние элемента
SetItemData( hNewItem, GetItemData(hItem ));
SetItemState( hNewItem, GetItemState(hItem, TVIS_STATEIMAGEMASK ),TVIS_STATEIMAGEMASK );
// Вызываем виртуальную функцию для дальнейшей обработки наследованного класса
OnItemCopied( hItem, hNewItem);
return hNewItem;
}
void CTreeCtrlX::OnItemCopied(HTREEITEM /*hItem*/, HTREEITEM /*hNewItem*/)
{
// Виртуальная функция
}
Источник: ProtoSphere
|