Treeview en C (winapi)

Résolu
cs_joh Messages postés 54 Date d'inscription jeudi 6 février 2003 Statut Membre Dernière intervention 6 juin 2005 - 10 nov. 2004 à 17:41
Alcantornet Messages postés 89 Date d'inscription mardi 8 février 2005 Statut Membre Dernière intervention 14 novembre 2007 - 23 mars 2006 à 15:53
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

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
10 nov. 2004 à 17:50
il faut envoyer le message TVM_GETNEXTITEM avec le flag TVGN_CARET

il y a aussi la macro TreeView_GetSelection
3
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
10 nov. 2004 à 18:20
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.
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 nov. 2004 à 19:12
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);
}
3
cs_joh Messages postés 54 Date d'inscription jeudi 6 février 2003 Statut Membre Dernière intervention 6 juin 2005
10 nov. 2004 à 18:06
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?
0

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

Posez votre question
cs_joh Messages postés 54 Date d'inscription jeudi 6 février 2003 Statut Membre Dernière intervention 6 juin 2005
10 nov. 2004 à 19:07
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.
0
Alcantornet Messages postés 89 Date d'inscription mardi 8 février 2005 Statut Membre Dernière intervention 14 novembre 2007
23 mars 2006 à 15:53
au lieu d'allouer 256 octet, utiliser pnmtv->itemNew.cchTextMax qui contient la longueur du text.


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