Trie Listview

abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 - 2 juin 2005 à 11:17
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 - 2 juin 2005 à 18:52
Bonjours,
Je voudrai trier les colonnes d'un listview, voici ma fonction de comparaison :

HWND hList;
int CALLBACK Compare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
HWND hListView = GetDlgItem(hList, IDC_LIST1);
char chaine1[256];
ListView_GetItemText(hListView,lParam1,lParamSort,chaine1,256);
char chaine2[256];
ListView_GetItemText(hListView,lParam2,lParamSort,chaine2,256);
char test[512];
sprintf(test,"%s - %s :: %i - %i :: %i",chaine1,chaine2,lParam1,lParam2,lParamSort);
MessageBox(0,test,"Erreur",MB_ICONERROR);
return 0;
}
Le probleme c'est que je n'arrive pas à récupérer le numero de ligne, donc je ne peux pas en déduire le texte des 2 lignes à comparer, si qlq1 peut m'éclairer un peu ..... ^^

Mci

Have Fun ...

7 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 juin 2005 à 11:23
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
2 juin 2005 à 12:27
Tkt j'ai déjà vu la plupart des sources en rapport avec la tienne, dont la tienne et je bloc encore !!

Have Fun ...
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 juin 2005 à 13:14
OK, des fois les gens cherchent pas alors on sait jamais.

Ce qui est important c'est que tu doit pouvoir utiliser lParam1 et
lParam2, et pour ca il faut que tu associes des valeurs à tes items.
Pour ca, quand tu fais tes InsertItem, tu doit mettre lvi.mask =
LVIF_PARAM | ...; et aussi renseigner lvi.lParam
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
2 juin 2005 à 15:06
Bon alors ce que g fait, c'est k chaque fois que j'insert un item, je lui mes lvi.lParam = n; n++; donc à chaque fois ils ont une valeur différente. Je pense que c'est ça kil fallais faire.
Le pb c que pour récupérer l'item égale lParam je fé un ListView_GetItem() avec lvi.lParam = lParam.
Mais le texte retourné est n'a pas de rapport !!

Bon voila le code :

int CALLBACK Compare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
HWND hListView = GetDlgItem(hcurrentlist, IDC_LIST1);
char chaine1[256];
char chaine2[256];


LV_ITEM lvItem1;


lvItem1.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
lvItem1.state = 0;
lvItem1.stateMask = 0;
//lvItem1.iItem = lParam1;
lvItem1.lParam = lParam1;
lvItem1.iSubItem = lParamSort;
lvItem1.pszText = chaine1;
lvItem1.cchTextMax = 256;


LV_ITEM lvItem2;


lvItem2.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
lvItem2.state = 0;
lvItem2.stateMask = 0;
//lvItem2.iItem = lParam2;
lvItem2.lParam = lParam2;
lvItem2.iSubItem = lParamSort;
lvItem2.pszText = chaine2;
lvItem2.cchTextMax = 256;


ListView_GetItem(hListView,&lvItem1);
ListView_GetItem(hListView,&lvItem2);


char test[512];
sprintf(test,"%i %s - %s %i -> %i :: %i",lParam1,chaine1,chaine2,lParam2+1,strcmp(chaine1,chaine2),lParamSort);
int res = MessageBox(0,test,"Erreur",MB_YESNOCANCEL);
return strcmp(chaine1,chaine2);
}

Si tu peux me dire ou je bug :D
Have Fun ...
0

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

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 juin 2005 à 15:27
Tu cherches la complication, normalement pas besoin de GetItem dans la
fonction de comparaison, les lParam suffisent. Je te conseille de faire
comme moi, dans lParam tu mets un ptr vers une structure qui contient
les données pour toutes les colonnes
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
2 juin 2005 à 15:58
je suis tout a fait d'accord avec toi, c ce que je pensé faire, c a d mettre une chaîne de caractère dans le lParam. Cpd on peut mettre que des pointeur, et étant donné que je remplie mon tableau en listan un répertoire, je ne peux pas pointé, à moins kil soit possible de pointer sur un fichier ou sinon faudrai que je remplisse un tableau avec les différente données contenu dans la list, un peu dommage je trouve !!

Have Fun ...
0
abdoulax Messages postés 875 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 22 juin 2012 1
2 juin 2005 à 18:52
En fait je passe que ta raison ta solution est la meilleur !!

Have Fun ...
0
Rejoignez-nous