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 : Sélectionner tout - Visualiser dans une fenêtre à part
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