Listview à plusieurs colonnes et images

Résolu
lemick_2 Messages postés 4 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 18 mai 2008 - 18 mai 2008 à 11:07
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 18 mai 2008 à 19:49
Salut,

Je suis actuellement en train de porter une appli de CVI/Labwindows sur VS 2008, et je bloque sur la listview de mon application.

J'ai vu plusieurs sources permettant d'ajouter du texte dans plusieurs colonnes( http://www.cppfrance.com/codes/TRI-COLONNES-LISTVIEW-WIN32_24239.aspx ), mettre des images dans une liste simple(http://chgi.developpez.com/windows/listview/) mais je n'en ai pas vu avec les 2 :/

J'ai plusieurs questions :
- Est t'on obligé de passer par l'évenement "LVN_GETDISPINFO" pour afficher du texte dans la liste, ne peux t'on pas le faire plus simplement? Changer unitairement les cellules"

- Mon anglais s'est un peu rouillé est j'ai un peu de mal à comprendre le rôle précis de chacuns des membres des structures LVITEM et LVCOLUMN, quelqu'un aurai t'il un lien vers un tuto?

merci d'avance :)

11 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
18 mai 2008 à 14:36
subitem tu peux le mettre à 0 je pense, pour ma part je ne me souviens pas avoir eu à l'utilier.
item = index de la ligne dont il est question

Pour ton code, tu peux pas donner un projet complet? Ca m'évitera d'avoir à tout refaire pour tester

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 mai 2008 à 17:04
Salut,
Pour LVN_GETDISPINFO je pense qu'on peut s'en passer. Personnellement je ne m'en sers jamais. Pour changer le texte d'une seule cellule d'une ListView je fais comme ceci:
lvitem.mask = LVIF_TEXT;
lvitem.iItem=0;//premier item
lvitem.iSubItem=2;// cellule N°2
lvitem.pszText="Bonjour";
SendMessage(hlistview,LVM_SETITEMTEXT,0,(LPARAM)&lvitem);
On peut aussi utiliser la macro ListView_SetItemText().
Pour d'autres modifications on peut utiliser le message LVM_SETITEM ou la macro ListView_SetItem().
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 mai 2008 à 13:21
Je pense que oui, on est obligé d'utiliser le message LVN_GETDISPINFO.
Quels sont les champs que tu ne comprends pas dans les structures LVITEM et LVCOLUMN?

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
lemick_2 Messages postés 4 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 18 mai 2008
18 mai 2008 à 13:39
Merci pour ta réponse.
Pour les structure, j'ai un peu de mal avec les items et subitems.


Sinon au niveau de ma liste, j'arrive à afficher les icones en mode "simple" ( pas de colonnes --> LVSIL_NORMAL) mais quand j'insère les colonnes, les icones n'apparaissent pas ( vide) pourtant j'ai bien mis le LVSIL_STATE à la création de la liste.

J'ai mis ici >http://lemick2.free.fr/liste.txt< le bout de code concerné au cas ou je louperai quelque chose d'important.
0

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

Posez votre question
lemick_2 Messages postés 4 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 18 mai 2008
18 mai 2008 à 14:43
Merci pour ta réponse :)

J'ai trouvé la solution à mon problème :
Il faut déclarer la liste d'image avec le style "LVSIL_SMALL" (ListView_SetImageList)
Je trouve pas ca très logique mais l'important est que ca marche.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 mai 2008 à 17:08
Ben j'aurai appris un truc aujourd'hui. Je n'avais jamais pu comprendre à quoi servait ce subItem...

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 mai 2008 à 17:30
Je pense que LVN_GETDISPINFO ne doit être utilisé que si le contenu de la listview est stocké quelque part par l'application. Par défaut, une listview gère elle-même son contenu.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 mai 2008 à 18:36
LVN_GETDISPINFO est effectivement très pratique pour fournir les données seulement quand les lignes sont visibles, ça permet un affichage quasi instantané au lieu d'insérer des milliers (ou plus en cas de grosse table BDD) de lignes dans la listview.

ciao...
BruNews, MVP VC++
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 mai 2008 à 19:25
Pour la vitesse il est également possible d'utiliser une ListView en OWNERDRAWFIXED. Ainsi, on ne dessine qu'une portion de lignes à la fois. La listview aura une taille fixe. Disons une trentaine d'éléments au total par exemple. Le contenu de ces éléments correspondra à une page, parmi plusieurs, d'une trentaine de lignes extraites d'une base de données ou autre. Quelques astuces de programmation et le tour est joué.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 mai 2008 à 19:33
Je n'ai pas compris l'intérêt d'une liste en OWNERDRAWFIXED plutot que de traiter

LVN_GETDISPINFO. LVN_GETDISPINFO n'étant envoyé que pour les lignes et colonnes à afficher, on fait déja le strict minimum.

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
18 mai 2008 à 19:49
En OWNERDRAWFIXED, l'application se charge de dessiner la partie visible d'une listview. Elle peut chercher quoi afficher là où on veut en dehors du vrai contenu de la listview.
0
Rejoignez-nous