ncoder
Messages postés244Date d'inscriptionvendredi 6 mai 2005StatutMembreDernière intervention 6 avril 2008
-
16 avril 2007 à 14:07
ncoder
Messages postés244Date d'inscriptionvendredi 6 mai 2005StatutMembreDernière intervention 6 avril 2008
-
17 avril 2007 à 17:05
Bonjour à tous !
Je fais un programme avec une listview à 5 colonnes, dont la dernière est une progressbar.
Pour gérer tout ça, j'ai utilisé le style LVS_OWNERDRAWFIXED, et je dessine tout à la main.
Tout fonctionne de ce coté là (le texte s'affiche et les progressbar aussi).
D'un autre coté, je veux faire en sorte de pouvoir trier cette listview en cliquant sur les colonnes.
En rajoutant deux trois petits trucs, j'arrive à obtenir ce que je veux, c'est-à-dire je peux trier toutes mes colonnes suivant certains paramètres.
Par contre, pour gérer la progressbar, je reçois l'évènement WM_DRAWITEM, et pour pouvoir trier la listview, LVN_GETDISPINFO.
Et le problème c'est que ça me fait l'un ou l'autre.
Si je fais
ListView_SetExtendedListViewStyleEx(hListView, 0, LVS_OWNERDRAWFIXED);
je ne peux plus trier ma ListView (en fait je crois que si, mais plus rien ne s'affiche, juste ce que je fais "manuellement"),
et si je fais
ListView_SetExtendedListViewStyleEx(hListView, 0, LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP);
je peux trier ma ListView mais les progressbar ne s'affichent plus .
(Bien sûr j'ai essayé les deux styles en meme temps...)
Choix cornélien, n'est-ce pas ?
Alors j'ai essayé de dessiner les progressbar dans LVN_GETDISPINFO, mais je n'y arrive pas.
Je ne sais pas si c'est parce qu'ainsi FillRect() ne fonctionne plus, ou bien que je n'arrive pas à récupérer le bon item considéré
(je fais :
case LVN_GETDISPINFO:
pDispInfo = (NMLVDISPINFO*)lParam;
//Je gère le tri
lpDrawItem = (LPDRAWITEMSTRUCT) &pDispInfo->item
//Je gère les progressbar
)
Si vous savez comment je peux avoir le tri ET les progressbar, je vous serai grandement reconnaissant !
Je me penche dessus depuis un certain temps ...
Alors si vous avez une autre manière de procéder, ou si vous avez trouvé une faille dans la mienne, j'attends vos réponses !
Merci d'avoir lu mon long problème
A+
Bonne programmation
<hr size="2" width="100%" /> Site
ncoder
Messages postés244Date d'inscriptionvendredi 6 mai 2005StatutMembreDernière intervention 6 avril 20081 16 avril 2007 à 14:14
Par la meme occasion, j'ai un autre problème : j'ai sous-classé cette ListView, pour gérer les click droits, etc.
Je reçois alors WM_RBUTTONUP pour ma ListView, et je mets le code à exécuter.
Mais le problème, c'est qu'il faut faire un double clic droit pour que ça marche !!
Alors que je traite bien WM_RBUTTONUP et non WM_RBUTTONDBLCLK ... !
Une explication ?
A+
Bonne programmation
<hr size="2" width="100%" /> Site
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 16 avril 2007 à 19:58
Salut,
Peut etre tu peux essayer de dessiner ta progressbar en utilisant le customdraw (NM_CUSTOMDRAW, envoyé via WM_NOTIFY), ca semble plus adapté vu que tu n'a besoin de personnaliser qu'une colone sur cinq. L'ownerdraw c'est vraiment quand on veut tout redessiner soit-même.
Par la meme occasion tu pourra aussi traiter NM_RCLICK (toujours avec WM_NOTIFY), et ainsi t'éviter d'avoir a sous classer la listview pour rien.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 16 avril 2007 à 21:07
En pensant mettre le style LVS_OWNERDRAWFIXED, tu mettais en réalité LVS_EX_INFOTIP
Contrairement aux LVS_EX_, tu peux mettre LVS_OWNERDRAWFIXED directement à la création de ta ListView
ncoder
Messages postés244Date d'inscriptionvendredi 6 mai 2005StatutMembreDernière intervention 6 avril 20081 17 avril 2007 à 10:45
aardman => c'est vrai, je n'ai qu'à dessiner qu'une seule colone (celle des progressbar), tu penses que je peux les dessiner avec NM_CUSTOMDRAW ? Je vais essayer merci !
Pour le sous-classement je suis d'accord, je savais bien que c'était un peu lourd de la sous-classer alors qu'il pouvait y avoir d'autres manières vu ce que je faisais, merci de m'avoir mis sur la voie.
vecchio56 => ok j'utiliserai SetWindowLong et pas ListView_SetExtendedListViewStyleEx pour mettre LVS_OWNERDRAWFIXED ... ! mais là c'était juste pour l'explication ( en fait je faisais comme tu as dit, je le mettais directement à la création de ma ListView). Merci pour l'explication des LVS_EX_
Merci pour vos réponses, et d'avoir lu mon problème (oui, il est long, je sais )
Je vais regarder un peu tout ça.
A+
Bonne programmation
<hr size="2" width="100%" /> Site