3

WINAPI Treeview を使用してデータを表示しています。TV ITEM を選択するときに、選択した 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 に答える