2014-05-13 62 views
-1

我们如何编辑项目的标签并使用修改后的文本设置编辑控件?使用win32编辑treeview项目标签。

我一直这样做,但项目并没有被输入的新文本覆盖。任何人都可以帮助我通过使用win32来实现这一点。

这就是我所做的。

if(((LPNMHDR)lParam)->code == TVN_BEGINLABELEDIT) 
      { 

       hEdit=TreeView_GetEditControl(hTree); 
       SetFocus(hEdit); 

      } 
      if(((LPNMHDR)lParam)->code == TVN_ENDLABELEDIT) 
      { 

       char Text[256] = ""; 
       tvItem.hItem = Selected; 
       SendDlgItemMessage(hWnd,IDC_TREE,TVM_GETITEM,0,(LPARAM)&tvItem); 
       GetWindowText(hEdit, Text, sizeof(Text)); 
       tvItem.pszText = Text; 
       SendDlgItemMessage(hWnd,IDC_TREE,TVM_SETITEM,0,(LPARAM)&tvItem); 


      } 

什么你知道它正显示出输入的文本在“tvItem.psText”,但是当我设置的项目它没有显示在项目标签修改和标签是一样的老text.Can奇迹任何人都可以帮助使编辑后的文本显示在项目标签上。

由于事先 西瓦V

+0

你会使用'char'数组作为一个字符串类型有一个真正的问题。过去15年的Windows应用程序一直是Unicode,这意味着'wchar_t'是要使用的字符类型。使用'L'前缀字符串文字(如“”)。 –

回答

2

Read the documentation,它会告诉你,你需要知道:

lParam的
指向一个NMTVDISPINFO结构。此结构的item成员是TVITEM结构,其hItem,lParampszText成员包含有关编辑项目的有效信息。如果标签编辑被取消,则TVITEM结构的pszText成员为NULL;否则,pszText是编辑文本的地址。

返回值

如果pszText成员为非NULL,返回TRUE到项目的标签设置为编辑的文本。返回FALSE拒绝编辑的文本并恢复为原始标签。

备注

如果pszText成员为NULL,则返回值被忽略。

如果指定的LPSTR_TEXTCALLBACK值这个项目和pszText成员为非空,你TVN_ENDLABELEDIT处理程序应该从pszText文本复制到本地存储。

因此,尝试这样的事情:

... 
if (((LPNMHDR)lParam)->code == TVN_BEGINLABELEDIT) 
{ 
    hEdit = TreeView_GetEditControl(hTree); 
    SetFocus(hEdit); 
    break; 
} 

if (((LPNMHDR)lParam)->code == TVN_ENDLABELEDIT) 
{ 
    if ((LPNMTVDISPINFO)lParam)->item.pszText != NULL) 
     return TRUE; // or FALSE to reject the next text... 
    break; 
} 
... 
0

此代码只是说明你一些线索。

LPNMHDR hdr; 
NMLVDISPINFO *di; 

hdr = (LPNMHDR)lParam; 
di = (NMLVDISPINFO*)lParam; 
... 
... 
switch(hdr->code) 
{ 
... 
case TVN_ENDLABELEDIT: 
    if(di->tvItem.pszText != NULL) 
    { 
     //if you click 'Enter Key' after changing string, di->tvItem.pszText has already changed string. 
     //So, the edited string will change edit control label, by using 'return TRUE' 
     return TRUE; 
    } 
    else 
    { 
     //if you cancel to edit by using 'Esc Key', di->tvItem.pszText value is NULL 
     //So, the edited string will cancel, by using 'return FALSE' 
     return FALSE; 
    } 
} 
+0

[The documentation](http://msdn.microsoft.com/en-us/library/windows/desktop/bb773515.aspx)指出:“如果'pszText'成员为NULL,则返回值将被忽略。”所以返回FALSE只在'pszText'不为NULL时才有意义。 –

+0

你说得对。感谢您的更正。 – hyun