3

我正在使用 WINAPI Treeview 来显示一些数据。当我选择一个电视项目时,我必须获取选定的 TV_ITEM 文本。我正在使用以下代码

case WM_NOTIFY:
 switch( ((LPNMHDR)lParam)->code)
 {
 case TVN_SELCHANGED:
  {
         NMTREEVIEW* pnmtv = (LPNMTREEVIEW)lParam;
         LPTSTR str = (pnmtv->itemNew.pszText);
         MessageBox( hWnd, str,"load",MB_OK );
  }
  break;                        
}

我无法得到正确的值,我得到了某种垃圾值。MessageBox 显示某种特殊字符(那些不在键盘上)

任何人都可以帮助我,如何获取所选项目的文本。提前致谢

4

1 回答 1

3

您是否阅读过有关 TVN_SELCHANGED 的文档?它从未提及 pszText。你需要

TVITEM item;
item.hItem = pnmtv->itemNew.hItem;
item.mask = TVIF_TEXT;
item.pszText = // allocate buffer
item.cchTextMax = // length of buffer
::SendMessage(hWnd, TVM_GETITEM, 0, (LPARAM)&item);

然后你会得到 item.pszText

PS 如果您使用 Windows API,您多久看到一次 Windows 为您分配和管理字符串?它只是不会发生。

于 2012-05-28T06:21:04.807 回答