CTreeCtrl : déplacer un item
Bonjour,
je me demande s'il n'y a pas une méthode plus simple que de faire ceci pour déplacer un item :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| // copie un item et ses fils juste après l'item demandé
HTREEITEM CMyTreeCtrl::CopyItem(HTREEITEM hItem, HTREEITEM hItemParent, HTREEITEM hItemAfter /*= TVI_LAST*/)
{
// récupération du libellé
CString sLabel = GetItemText(hItem);
// récupération de l'item
TVINSERTSTRUCT insertItem = {0};
insertItem.hParent = hItemParent;
insertItem.hInsertAfter = hItemAfter;
insertItem.item.hItem = hItem;
insertItem.item.mask = TVIF_HANDLE | TVIF_CHILDREN | TVIF_IMAGE | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_STATE | TVIF_TEXT;
GetItem(&insertItem.item);
// paramétrage du libellé
insertItem.item.cchTextMax = sLabel.GetLength();
insertItem.item.pszText = sLabel.GetBuffer();
// ajout de la copie de l'item
HTREEITEM hItemNouveau = InsertItem(&insertItem);
SetItemData(hItemNouveau, GetItemData(hItem));
// on copie les paramètres de l'item
CJFC_ItemBase* pParams = GetItemParams(hItemNouveau);
*pParams = *GetItemParams(hItem);
// si l'item a des enfants
if(ItemHasChildren(hItem))
{
// on les copie également
hItem = GetChildItem(hItem);
while(hItem)
{
CopyItem(hItem, hItemNouveau);
hItem = GetNextSiblingItem(hItem);
};
}
// on retourne l'item nouvellement créé
return hItemNouveau;
} |
sachant qu'il me reste ensuite à supprimer l'item source
je me pose la question aussi par rapport au fait que le "drag and drop" permet de déplacer (ou copier ?) un item, mais je ne sais pas comment c'est géré
si vous avez des suggestions, je suis preneur ;)