LISTVIEW API WINDOWS

Signaler
Messages postés
208
Date d'inscription
mardi 29 novembre 2005
Statut
Membre
Dernière intervention
13 mars 2009
-
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
-
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

Messages postés
199
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
28 février 2008

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)
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
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.
Messages postés
208
Date d'inscription
mardi 29 novembre 2005
Statut
Membre
Dernière intervention
13 mars 2009
1
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 
Messages postés
199
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
28 février 2008

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)
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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.
Messages postés
208
Date d'inscription
mardi 29 novembre 2005
Statut
Membre
Dernière intervention
13 mars 2009
1
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. 


 
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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"
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
J'ai écrit un code précisément sur le tri des listview:
http://www.cppfrance.com/codes/TRI-COLONNES-LISTVIEW-WIN32_24239.aspx
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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.