Treeview en C (winapi) [Résolu]

cs_joh 54 Messages postés jeudi 6 février 2003Date d'inscription 6 juin 2005 Dernière intervention - 10 nov. 2004 à 17:41 - Dernière réponse : Alcantornet 89 Messages postés mardi 8 février 2005Date d'inscription 14 novembre 2007 Dernière intervention
- 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
Afficher la suite 

6 réponses

Répondre au sujet
ymca2003 2070 Messages postés mardi 22 avril 2003Date d'inscription 3 juillet 2006 Dernière intervention - 10 nov. 2004 à 17:50
+3
Utile
il faut envoyer le message TVM_GETNEXTITEM avec le flag TVGN_CARET

il y a aussi la macro TreeView_GetSelection
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ymca2003
ymca2003 2070 Messages postés mardi 22 avril 2003Date d'inscription 3 juillet 2006 Dernière intervention - 10 nov. 2004 à 18:20
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ymca2003
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 11 nov. 2004 à 19:12
+3
Utile
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);
}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de vecchio56
cs_joh 54 Messages postés jeudi 6 février 2003Date d'inscription 6 juin 2005 Dernière intervention - 10 nov. 2004 à 18:06
0
Utile
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?
Commenter la réponse de cs_joh
cs_joh 54 Messages postés jeudi 6 février 2003Date d'inscription 6 juin 2005 Dernière intervention - 10 nov. 2004 à 19:07
0
Utile
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.
Commenter la réponse de cs_joh
Alcantornet 89 Messages postés mardi 8 février 2005Date d'inscription 14 novembre 2007 Dernière intervention - 23 mars 2006 à 15:53
0
Utile
au lieu d'allouer 256 octet, utiliser pnmtv->itemNew.cchTextMax qui contient la longueur du text.


pnmtv->itemNew.pszText=malloc(pnmtv->itemNew.cchTextMax);
Commenter la réponse de Alcantornet

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.