TRI DES COLONNES D'UNE LISTVIEW (WIN32)

gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010 - 4 juil. 2004 à 11:51
Tahrn Messages postés 1 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 5 mai 2008 - 5 mai 2008 à 16:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24239-tri-des-colonnes-d-une-listview-win32

Tahrn Messages postés 1 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 5 mai 2008
5 mai 2008 à 16:40
Code interessant.

Petite remarque: le 3ème paramètre de la fonction de comparaison (lParamSort) n'est pas utilisé dans ce code.

Il devrait être utilisé pour passer un pointeur vers une structure.

Il est judicieux de stocker dans cette dernière:
*Le numéro de la colonne
*L'ordre de tri à effectuer
*...autres (suivant l'application)

Cela permet de réduire l'utilisation de variables globales, et, en passant le numéro de la colonne, permet d'implémenter une unique fonction de tri.
Migluche Messages postés 1 Date d'inscription mercredi 6 septembre 2006 Statut Membre Dernière intervention 12 septembre 2006
12 sept. 2006 à 04:46
Salut,
J'aimerais me servir du code pour les petites flèches dans un projet VB.NET.
Je ne suis pas sous Win XP mais si je regarde l'explorateur Windows de Win2000, les petites flèches, qui indiquent le sens du tri, y sont affichées.
Est-ce que quelqu'un sait comment s'y prendre ou est en mesure de me fournir un exemple?
Merci beaucoup!
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
4 juin 2006 à 19:51
MDR si je pouvai je le ferai. Je compte sur toi pour taire ce secret à jamais :D
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
4 juin 2006 à 19:47
Tu devrais enlever le 'e' à la fin de servie, ça pourrait prêter a confusion :)
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
4 juin 2006 à 19:45
Exelente source, moi qui cherchai comment apprendre à gérer une listview je suis servie ;)
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 nov. 2004 à 15:31
et ajouter l'option -lcomctl32 au linker bien sur
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
28 nov. 2004 à 15:29
Moi j'ai trouvé qu'il suffisait juste de définir convenablement _WIN32_IE (au moins 0x0300), c'est tout
rastalalalolo Messages postés 17 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 15 janvier 2010
26 nov. 2004 à 11:34
lut All

Pour ceux qui developpe sur dev-cpp et qui n'arrive pas a utiliser InitCommonControls, la suite vous interressera...
j'utilise dev cpp 4.9.9.0.

*D'abord mettre a jour dev:
dans dev cpp: menu "outils"-> "n. version/package"
et pour verifier les versions grace au
"package manager"

Windows32 API en version 3.1
gcc-core en 3.4.2....
gcc-g++ en 3.4.2....
gcc-objc en 3.4.2....
et MinGW runtime en 3.5

mettez a jour votre gnu make ca mange pas de pain, actuel 3.80.0-3

*Ensuite il faut lié la librairie utile comctl32.lib
du nom de libcomctl32.a sous devcpp

aucune ligne de commande a taper pour le fegniant que je suis, merci au developpeur,
menu "projet"->"option du projet"
->onglet "parametres"->bouton"ajouter fichier"
et puis allez chercher votre librairie libcomctl32.a

Apres le linkage de la lib la compil s'effectue

Je vous souhaite une bonne journée et une bonne prog:)

@++
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
22 nov. 2004 à 18:56
k
schade
thx
B.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
22 nov. 2004 à 18:50
Je ne pense pas, je crois que c'est la première fois que ms fournissait gratuitement son compilateur
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
22 nov. 2004 à 16:52
Bonjour vecchio

le toolkit est pour 2003 si je lis bien
existe t'il une version pour VC6??
merci
++
Nono
cs_rangoon Messages postés 6 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 14 décembre 2005
18 août 2004 à 08:35
J'ai réalisé tes modifs, mais rien ne fais. Je n'ai toujours pas les flèches haut et bas qui s'affichent.
Aurai-je toutes les bibliothèques (*.h) à jour?

Pour le HeapFree, en utilisant un cast explicite, vs6 m'indique que "User breakpoint called from code at 0x77F667cd".
Et le message: "HEAP[LVSort.exe]: Invalid Address specified to RtlFreeHeap( 00140000, 00144790 )".
Par contre, quand j'utilise LVSort.exe (sans vs6), il n'y a aucune erreur. Je pense que c'est normal.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 août 2004 à 11:52
tu peux essayer d'enlever cette ligne alors, et de mettre
#define HDF_SORTUP 0x0400
#define HDF_SORTDOWN 0x0200
à la place

Pour le HeapFree, le pb viens du fait que je compile en mode C (option /C à la place de /TC), donc il faut faire un cast explicite:
HeapFree(heap, 0, (void*)lvi.lParam);
cs_rangoon Messages postés 6 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 14 décembre 2005
17 août 2004 à 11:29
La compilation se passe très bien, si je fais les modifs citées précédement.

Et à la première ligne du fichier LVSort.cpp, j'ai bien
#define _WIN32_WINNT 0x501
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 août 2004 à 16:20
Au fait, dans ton message précédent, ca compilait bien, puisque tu avais juste un probleme de link....
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 août 2004 à 16:19
Regarde bien, au début de mon fichier, j'ai mis
#define _WIN32_WINNT 0x501
Vérifie que tu n'a pas enlevé cette ligne. Si ca ne marche toujours pas, dis le moi.
cs_rangoon Messages postés 6 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 14 décembre 2005
16 août 2004 à 09:38
Merci beaucoup, vecchio56.

Cela à marcher du premier coup. Mais l'affichage des flèches ne fonctionne pas, et je suis sous XP.

j'ai oublié de te signaler ces erreurs de compilation:
C:\Documents and Settings\Ceria\Mes documents\listview\testliview\LVSort.cpp(43) : error C2065: 'HDF_SORTUP' : undeclared identifier
C:\Documents and Settings\Ceria\Mes documents\listview\testliview\LVSort.cpp(151) : error C2065: 'HDF_SORTDOWN' : undeclared identifier
C:\Documents and Settings\Ceria\Mes documents\listview\testliview\LVSort.cpp(256) : error C2664: 'HeapFree' : cannot convert parameter 3 from 'long' to 'void *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
Creating browse info file...

LVSort.exe - 3 error(s), 0 warning(s)

Alors j'ai mis en commentaire "HeapFree(heap, 0, lvi.lParam);" et j'ai rajouté:
#if (_WIN32_WINNT >= 0x501)
#define HDF_SORTUP 0x0400
#define HDF_SORTDOWN 0x0200
#endif
mais mon compilateur n'aime pas: "#if (_WIN32_WINNT >= 0x501)", il me signale:
c:\documents and settings\ceria\mes documents\listview\testliview\LVSort.cpp(6) : fatal error C1012: unmatched parenthesis : missing ')'
Error executing cl.exe.
Donc j'ai suprimé le #if et le #endif et j'ai laissé les #define.

Avec l'ajoût de ton aide, cela à marcher du premier coup. Mais l'affichage des flèches ne fonctionne pas, et je suis sous XP et vs6.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 août 2004 à 19:38
J'imagine que tu as du refaire un nouveau projet (sans doute que tu as vs6). Il faut que tu ajoutes la librairie comctl32.lib, soit dans les options du projet, soit en ajoutant la directive
#pragma comment(lib, "comctl32.lib")
directement dans le fichier cpp pour dire au linker d'utiliser cette librairie.
cs_rangoon Messages postés 6 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 14 décembre 2005
13 août 2004 à 18:24
salut vecchio56.

J'essaye de comprendre commment programmer les listview.

Je compile ton source et j'obtient l'erreur suivante:
--------------------Configuration: LVSort - Win32 Debug--------------------
Compiling...
LVSort.cpp
Linking...
LVSort.obj : error LNK2001: unresolved external symbol __imp__InitCommonControlsEx@4
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main

merci d'avance de m'aider. A+
Debug/LVSort.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
Creating browse info file...

LVSort.exe - 3 error(s), 0 warning(s)
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
4 juil. 2004 à 20:24
http://msdn.microsoft.com/visualc/vctoolkit2003/
Je pense qu'il y a moyen de l'utiliser avec dev-c++
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
4 juil. 2004 à 18:46
Où trouver ce toolkit Visual C++, sur MSDN??? et est-ce compatible avec DevC++ 4.9.5.0???
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
4 juil. 2004 à 17:01
C'est pour la petite flèche dont je parlais, elle n'est dispo que pour XP ou supérieur

#if (_WIN32_WINNT >= 0x501)
#define HDF_SORTUP 0x0400
#define HDF_SORTDOWN 0x0200
#endif

Pour InitCommonControlEx, il faudrait que tu télécherges la dernière version de MinGW. Ou bien bien télécharge le toolkit Visual C++ (compilateur de Visual C++ en ligne de commande, gratuit).

Pour le HeapFree, c'est un oubli, et c'est corrigé
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
4 juil. 2004 à 11:51
Source très interessante pour manipuler les ListView, 10/10.
Malheureusement je ne peux pas utiliser InitCommonControlEx(...) et ListView_SetExtendedListViewStyleEx(...) parce que j'utilise DevC++.
Juste une question, pourquoi tu as defini _WIN32_WINNT en 0x501(en 1ère ligne)??? et une remarque: est-ce normal (ou un oubli) que tu utilises HeapAlloc(...) sans HeapFree(...)? A+