LISTVIEW API WINDOWS

cs_ralebole Messages postés 208 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 5 janvier 2023 - 8 juin 2006 à 22:21
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 10 juin 2006 à 00:19
Comment ranger un listview sur 2 colonnes (col1 et col 2) je m'explique par cette exemple
( la colonne 1 est prioritaire et ensuite la colonne 2) 

exemple au debut voila mon listview
noms          col1       col2
michel          8           -1
bernard        10         4
pierre           5           6
paul             7           3
jacques        8            6

Apres le rangement je voudrais obtenir ceci
noms           col1       col2
bernard        10         4
jacques        8            6
michel          8           -1
paul             7           3
pierre           5           6

Merci de mapportez votre aide.
Signer Ralebole

9 réponses

Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008
8 juin 2006 à 23:25
Utilises LV_COLUMN (ListView_InsertColumn) pour dessiner les colonnes, et LV_ITEM (ListView_InsertItem) pour les Items...
Et moi j'utilise ListView_SetItemText pour afficher dans les autres colonnes...

___________________
MVS - Most Valuable Student ( Microsoft)
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 juin 2006 à 00:55
Salut,


Pour trier la listview, il faut lui envoyer un message LVM_SORTITEMS ou
bien LVM_SORTITEMSEX (voir les differences sur msdn).


Ces messages prennent en parametre un pointeur sur une fonction de
comparaison dont le format est prédéfini. Cette fonction est chargée de
comparer 2 items entre eux, et donc c'est dans cette fonction qu'il faut que
tu geres la priorité de la colone 1 sur la colone 2 lors du tris.
0
cs_ralebole Messages postés 208 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 5 janvier 2023 1
9 juin 2006 à 09:04
Merci pour la reponse mais un exemple serait le bienvenue j' avais deja consulter msdn mais cela ne m'explique pas comment faire et j'ai fait une recherche sur le web (LVM_SORTITEMS)  dans l'epoir de trouver un exemple mais rien.

Pour l'insertion des items il n'y à pas de probleme mais c'est juste pour le trie

Si quelq'un c'est ou je peut trouvé un exemple ou me donné un exemple ou une explication plus détaillé merci.

Signer Ralebole 
0
Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008
9 juin 2006 à 09:24
Oups désolé j'ai répondu n'importe quoi ; j'ai cru que tu voulais savoir comment faire une listview :s

___________________
MVS - Most Valuable Student ( Microsoft)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
9 juin 2006 à 15:28
Salut,
Il parait que tu veux gérer une petite base de donnée. Dans ce cas je te conseille de créer une base de donnée Access (.mdb) vide qui contient juste les champs sans aucun enregistrement. Dans ton programme, tu accéderas à cette base avec le composant ADO présent dans tous les Windows depuis 98. Avec de simples requetes SQL tu peux faire toutes les opération que tu veux sur la base. Le tri par exemple peut se faire par ordre de priorité sur plusieurs colonnes. C'est le résultat du tri qui sera alors affiché dans la ListView.
0
cs_ralebole Messages postés 208 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 5 janvier 2023 1
9 juin 2006 à 16:22
Je ne veut pas gérer une base de donnée je veut juste faire un trie dans un listview alors me lancé dans un bazard comme sa pas la peine. 


 
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
9 juin 2006 à 18:48
Le solution t'as été donnée par aardman. Tout doit être codé dans la fonction de comparaison ayant comme prototype:
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
Cette fonction doit être indiquée pendant l'envoi du message LVM_SORTITEMS:
SendMessage(hListView,LVM_SORTITEMS,(WPARAM)0,(LPARAM)CompareFunc);
La fonction de comparaison  comparera  deux items à la fois, lParam1 et lParam2. Elle doit retourner une valeur négative si le premier item doit précéder le second. Une valeur positive dans le cas contraire ou 0 en cas d'égalité. Tu utiliseras le message LVM_GETITEMTEXT pour retrouver les chaines à comparer. Cette fonction est appelée par le système autant de fois que nécessaire suivant le nombre d'item dans la ListView.
Personnellement, je préfère utiliser LVM_SORTITEMSEX car il permet d'ignorer le membre lParam de la structure LVITEM.
Tu peux regarder le code source de aardman:
http://www.cppfrance.com/codes/EDONKEY-SEARCHER-SOCKET-WIN32_27536.aspx
Examine le fichier "interface.cpp"
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 juin 2006 à 22:22
J'ai écrit un code précisément sur le tri des listview:
http://www.cppfrance.com/codes/TRI-COLONNES-LISTVIEW-WIN32_24239.aspx
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
10 juin 2006 à 00:19
C'est vrai vecchio56. Je n'avais pas vu ce code source. Je pense que notre ami ralebole a maintenant suffisament d'éléments de base pour résoudre son problème. Après avoir bien compris le fonctionnement de cette fonction de tri, il n'aura qu'à l'améliorer pour gérer la priorité des colonnes.
0
Rejoignez-nous