On 19 sep, 16:08, XWindoo <khan.temu...@gmail.com> wrote:
> Bonjour à tous,
>
> Pour renommer un noeud d'un treeview, j'ai utilisé le style
> TVS_EDITLABELS qui permet comme son nom l'indique, d'éditer
> directement le label dans le treeview.
> Je me suis heurté à un premier problème : lorsqu'on édite un label, et
> que l'on clique ailleurs pour terminer l'édition, c'est l'ancien texte
> qui remplace celui qu'on viens de taper. Pour résoudre ce problème, au
> niveau du code, j'ai intercepté le message TVN_ENDLABELEDIT et fais :
>
> Code C++ :
> TreeView_SetItem(hTreeView, ((LPNMTVDISPINFO)lParam)->item);
>
> pour remplacer l'ancien texte par le nouveau.
> Est-ce la meilleur façon de procéder ?
>
> D'autre part, lors de l'édition, l'appui sur les touches entrer et
> échap n'a aucun effet, ni pour annuler ni pour valider l'édition.
Ce n'est pas normal (si pas dans Dialog Box (DWLP_MSGRESULT)...)
Pour un TreeView dans une fenêtre classique, par ex =>
case WM_NOTIFY:
{
LPNMHDR pnmh ((LPNMHDR)lParam);
switch (pnmh->code)
{
case TVN_ENDLABELEDIT:
{
TV_DISPINFO *ptv = (TV_DISPINFO*) pnmh;
if (ptv->item.pszText != NULL)
{
TV_SetItemText(hWnd, ptv->item.hItem, ptv->item.pszText);
return TRUE;
}
}
break;
}
return 0;
}
break;
avec :
BOOL TV_SetItemText(HWND hWndTV, HTREEITEM hItem, char *sText)
{
TV_ITEM tvi;
tvi.hItem = hItem;
tvi.mask = TVIF_TEXT;
tvi.pszText = sText;
return (TreeView_SetItem(hWndTV, &tvi) != -1);
}