Header d'une listview [Résolu]

SnOOpss 571 Messages postés samedi 3 avril 2004Date d'inscription 5 décembre 2013 Dernière intervention - 17 mars 2005 à 14:20 - Dernière réponse : cs_aardman 1905 Messages postés mercredi 22 janvier 2003Date d'inscription 17 septembre 2012 Dernière intervention
- 18 mars 2005 à 16:30
Bonjour je cherche comment changer le headers d une list view (
couleurs ou fond ) j'ai trouvé ces fonctions la mais ca m'avance pas
beaucoup si vous auriez des exemples SANS MFC je suis prenneur aussi.



ListView_SetExtendedListViewStyleEx(hwndLV, 0, LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP);

HWND hLVHeader = ListView_GetHeader(hwndLV); // header de la ListView



lvc.mask = LVCF_TEXT | LVCF_WIDTH;

lvc.cx = 40;



lvc.pszText = "col1";

ListView_InsertColumn(hwndLV, 0, &lvc);



lvc.pszText = "col2";

ListView_InsertColumn(hwndLV, 1, &lvc);



lvc.pszText = "col3";

ListView_InsertColumn(hwndLV, 2, &lvc);



HDITEM h;

Header_GetItem(hLVHeader,0,&h);

h.mask |= HDI_BITMAP;

h.hbm = (HBITMAP)LoadImage(0,"c:\\test.bmp",IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

Header_SetItem(hLVHeader,0,&h);

h.pszText="test";
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
cs_aardman 1905 Messages postés mercredi 22 janvier 2003Date d'inscription 17 septembre 2012 Dernière intervention - 17 mars 2005 à 15:34
3
Merci
Salut,
En fait c'est plus compliqué, pour afficher le bitmap au lieu de la chaine dans le header, il faut passer le flag HDF_BITMAP dans le champ fmt de la structure HDITEM.
Puisque les champ fmt et hbm doivent etre valides, il faut mettre HDI_BITMAP | HDI_FORMAT dans le champ mask de la structure.

Et ca devrait aller..

Merci cs_aardman 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_aardman
cs_aardman 1905 Messages postés mercredi 22 janvier 2003Date d'inscription 17 septembre 2012 Dernière intervention - 17 mars 2005 à 15:10
0
Merci
Salut,
h.mask |= HDI_BITMAP;
h.mask n'est pas initialisé avant ca, faudrait pas plutot mettre h.mask = HDI_BITMAP ?
Commenter la réponse de cs_aardman
SnOOpss 571 Messages postés samedi 3 avril 2004Date d'inscription 5 décembre 2013 Dernière intervention - 17 mars 2005 à 18:45
0
Merci
Nickel c exactement ca !!

Me reste a regler les bordures mais je l'ai vu dans la msdn !!

Par contre si je veux juste changer la couleur ya une commande speciale ou je peux faire avec LVM_SETTEXTCOLOR
Commenter la réponse de SnOOpss
cs_aardman 1905 Messages postés mercredi 22 janvier 2003Date d'inscription 17 septembre 2012 Dernière intervention - 17 mars 2005 à 18:54
0
Merci
Salut,
Si tu parles de la couleur des items, c'est bien avec LVM_SETTEXTCOLOR qu'on la change.
Commenter la réponse de cs_aardman
SnOOpss 571 Messages postés samedi 3 avril 2004Date d'inscription 5 décembre 2013 Dernière intervention - 17 mars 2005 à 22:11
0
Merci
Ben en fait c'etait celle des headers que je cherche a changer et cette
commande ne marche pas je viens de tester j'ai bien vu que j'ai ce style

* : HDF_OWNERDRAWThe header control's owner draws the item.

Mais je me vois pas partir sur les ownerdraw, a la rigueur custom draw
mais la j'ai pas trouvé d exmple pour changer la couleur du fond ou
mettre une icone.
Commenter la réponse de SnOOpss
cs_aardman 1905 Messages postés mercredi 22 janvier 2003Date d'inscription 17 septembre 2012 Dernière intervention - 17 mars 2005 à 23:28
0
Merci
Salut,
Pour la couleur des headers, ca a pas l'air d'etre implementé, donc effectivement il faut se tourner vers l'ownerdraw.
Lorsqu'un control est en ownerdraw, la fenetre parent recoit un message WM_DRAWITEM qui contient tout les infos du control a redessiner, c'est en traitant ce message que tu pourra changer l'apparence de tes headers.
Commenter la réponse de cs_aardman
SnOOpss 571 Messages postés samedi 3 avril 2004Date d'inscription 5 décembre 2013 Dernière intervention - 18 mars 2005 à 12:36
0
Merci
C bon j'ai trouvé plus simple il me suffit de sous classer le header et
de traiter le message on_paint par contre je me suis fait cette
commande pour rajouter des colonnes et je trouve bizarre d avoir a
mettre le nom de ma colonne a la fois dans le LVCOLUMN (sinon ca na s
affiche pas) et le HDITEM (vu que c'est grace a lui que je trouve mes
noms quand je redessine)



void Addcol(HWND hwndLV,HWND hLVHeader, char *text,int taille) {



LVCOLUMN lvc;

lvc.mask = LVCF_TEXT | LVCF_WIDTH;

lvc.cx = taille;

lvc.pszText = text;

ListView_InsertColumn(hwndLV, 1, &lvc);



HDITEM h;

h.mask = HDI_TEXT | HDI_FORMAT | HDI_ORDER;

h.mask=12;

h.cchTextMax = 255;

Header_GetItem(hLVHeader,1,&h);

// h.mask |=HDI_TEXT;

h.pszText=text;

h.cchTextMax=strlen(text);

Header_SetItem(hLVHeader,1,&h);



}




Si tu pouvais me dire la difference entre lvc.pszText et
h.pszText ???
Commenter la réponse de SnOOpss
cs_aardman 1905 Messages postés mercredi 22 janvier 2003Date d'inscription 17 septembre 2012 Dernière intervention - 18 mars 2005 à 16:30
0
Merci
Salut,
lvc.pszText c'est le nom de la colone et h.pszText c'est le nom de l'item associé a la colone dans le header.
Le controle listview utilise le controle header, donc quand tu changes le texte d'une colone, le texte de l'item du header est automatiquement mis a jour (je pense).
Commenter la réponse de cs_aardman

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.