K_3
Messages postés4Date d'inscriptionsamedi 21 avril 2007StatutMembreDernière intervention25 octobre 2008
-
19 oct. 2008 à 12:45
K_3
Messages postés4Date d'inscriptionsamedi 21 avril 2007StatutMembreDernière intervention25 octobre 2008
-
25 oct. 2008 à 14:30
Bonjour,
J'ai une listview qui est similaire à une listbox mais contenant plusieurs colonnes,
je me demandais comment je pourrai procéder pour que la listview
soit "triable" par l'utilisateur c-à-d qu'il puisse prendre le premier élément par exemple
et le déplacer en milieu de liste.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 19 oct. 2008 à 17:05
Salut,
Une solution consiterait à utiliser la notification LVN_BEGINDRAG engendrée par la listview quand on tente de glisser un item avec la souris. Pendant le traitement de cette notification, on crée une DragImage en envoyant LVM_CREATEDRAGIMAGE à la listview puis on utilise les fonctions ImageList_BeginDrag() et ImageList_DragEnter(). A la fin de ce traitement on utilise SetCapture() pour capturer la souris. Un flag sera utilisé pour indiquer qu'il y'a une opération de drag en cours.
Pendant le traitement du message WM_MOUSEMOVE on utilise la fonction ImageList_DragMove(). On finit par traiter le message WM_LBUTTONUP en utilisant ImageList_DragLeave(), ImageList_EndDrag() et ImageList_Destroy(). On relâche ensuite la capture souris avec ReleaseCapture(). A partir de là, on ajoute un nouvel élément à l'emplacement pointé par le curseur de la souris, on lui transmet le contenu de l'élément sélectionné puis on supprime ce dernier.
Pour les détails des fonctions et messages se référer à la MSDN.