2014-05-13 86 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