Treeview en C (winapi) [Résolu]

Signaler
Messages postés
54
Date d'inscription
jeudi 6 février 2003
Statut
Membre
Dernière intervention
6 juin 2005
-
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007
-
Bonjours ,
Je suis entraine d'utiliser un treeview (pas mfc) et j'ai un probleme pour récuperer l'élément séléction dans mon treeview .Si quelqu'un a un bout de code pouvant me debloquer qui me le dise !!!merci d'avance

6 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
il faut envoyer le message TVM_GETNEXTITEM avec le flag TVGN_CARET

il y a aussi la macro TreeView_GetSelection
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
pour le code de notification TVN_SELCHANGED, seul les membres mask, hItem, state, et lParam de itemOld et itemNew de NMTREEVIEW sont valides.

comme tu as le hitem, tu peux envoyer TVM_GETITEM pour récupérer le texte (en fournissant un buffer et sa taille dans TVITEM.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Sur quoi pointe pnmtv->itemNew.pszText? Il faut que tu lui donne de la place pour récupérer le texte

if(((LPNMHDR)lParam)->code == TVN_SELCHANGED)
{ LPNMTREEVIEW pnmtv = (LPNMTREEVIEW)lParam;
pnmtv->itemNew.mask=TVIF_TEXT;
pnmtv->itemNew.pszText=malloc(256);

SendMessage(hwnd,TVM_GETITEM,NULL,(LPARAM)&(pnmtv->itemNew));

MessageBox(hwnd,pnmtv->itemNew.pszText,"",NULL);
free(pnmtv->itemNew.pszText);
}
Messages postés
54
Date d'inscription
jeudi 6 février 2003
Statut
Membre
Dernière intervention
6 juin 2005

Si j'ai bien compris ce bout de code devrai m'afficher le texte de l'element selectionner du Treeview

Voila mon code,

case WM_NOTIFY:
...
if(((LPNMHDR)lParam)->code == TVN_SELCHANGED)
{
LPNMTREEVIEW pnmtv = (LPNMTREEVIEW)lParam;

MessageBox(hwnd,pnmtv->itemOld.pszText,"",MB_OK);
}

en fait je ne comprend pas pourquoi mon msgbox affiche des donnée illisible.

une solution?
Messages postés
54
Date d'inscription
jeudi 6 février 2003
Statut
Membre
Dernière intervention
6 juin 2005

Bon voila ce que j'ai fait :

if(((LPNMHDR)lParam)->code == TVN_SELCHANGED)
{ LPNMTREEVIEW pnmtv = (LPNMTREEVIEW)lParam;
pnmtv->itemNew.mask=TVIF_TEXT;
SendMessage(hwnd,TVM_GETITEM,NULL,(LPARAM)&(pnmtv->itemNew));

MessageBox(hwnd,pnmtv->itemNew.pszText,"",NULL);
}

mais ca affiche toujours n'importe quoi.
probleme de mask? du sendmessage?

merci.
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

au lieu d'allouer 256 octet, utiliser pnmtv->itemNew.cchTextMax qui contient la longueur du text.


pnmtv->itemNew.pszText=malloc(pnmtv->itemNew.cchTextMax);