Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : ListView [ Windows / GUI ] (ncoder)

lundi 16 avril 2007 à 14:07:08 | ListView

ncoder

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

                                         Site

lundi 16 avril 2007 à 14:14:14 | Re : ListView

ncoder

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

                                         Site

lundi 16 avril 2007 à 19:58:20 | Re : ListView

aardman

Membre Club
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.

lundi 16 avril 2007 à 21:06:13 | Re : ListView

vecchio56

Administrateur CodeS-SourceS
Je n'ai pas tout lu (c'est très long!), mais je vois:
ListView_SetExtendedListViewStyleEx(hListView, 0, LVS_OWNERDRAWFIXED);

LVS_OWNERDRAWFIXED n'est pas un style étendu, tu dois donc utiliser SetWindowLong pour l'ajouter, et non ListView_SetExtendedListViewStyleEx

_____________________________________
Un éditeur de ressources gratuit pour Windows


lundi 16 avril 2007 à 21:07:50 | Re : ListView

vecchio56

Administrateur CodeS-SourceS
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

_____________________________________
Un éditeur de ressources gratuit pour Windows


mardi 17 avril 2007 à 10:45:24 | Re : ListView

ncoder

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

                                         Site

mardi 17 avril 2007 à 17:05:26 | Re : ListView

ncoder

Bon, j'ai finalement fait ma propre fonction de tri, avant d'afficher tous les items.
Comme ça, ça marche.

Merci à vous deux.

A+
Bonne programmation

                                         Site



Cette discussion est classé dans : listview, trier, colonnes, progressbar, lvs


Répondre à ce message

Sujets en rapport avec ce message

prob listview [ par flatou ] salut a tousj'ai un prob tt con avec une listview.Le prob est que je n'arrive pas a ajouter du texte dans les differentes colonnes. voici les bouts de comment creer des cellules dans une list view [ par vincetreg ] Bonjour tout le monde, j'ai un probleme très difficile à résoudre... Je souhaiterai creer des cellules dans une listview. En effet, à chaque création créer une listview dynamiquement avec plusieurs colonnes [ par romydamour ] salut à tous,voilà, si je vous montre ce petit bou listview et colonnes borland C++ 6.0 [ par bougnat83 ] bonjour, j'ai créé une listview sous borland c++ 6.0, avec deux colonnes. J'aimerais maintenant effacer le contenu de toute ma listview remplie précéd ListView et ProgressBar [ par w4nt3d2 ] Bonjour,je cherche à ajouter une ProgressBar dans un subitem d'une ListeView, cependant je n'utilise pas les MFC et je n'ai trouvé null part sur le we Listview à plusieurs colonnes et images [ par lemick_2 ] 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 plu trie des colonnes dans listview [ par demo42 ] bonjours j' ai une base de données mysql et je voudrai trier ma listview encliquant sur une colonne.. comment faire sans faire intervenir la base de d ListView édition pb [ par victorcoasne ] Bonjour, J'ai une ListView et quand je met le style LVS_EDITLABELS je peux éditer ce champs ! Seulement voilà j'ai une ListView avec LVS_REPORT comm progressbar dev-c++ [ par the diouk ] quelqu'un pourrait-t-il m'expliquer comment créer une progressbar (sans forcement me donner tout les détails car j'aime bien chercher par moi-même ) m listview finditem [ par cgmorpheus ] Bonjours tout le monde,Pour commencer je tien a dire que je suis débutant en API,alors excuser moi si je n'emploie pas les terme exact dans mon explic


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.