ドロップされたファイルを一覧表示するツリービューがあります。
新しいツリービューアイテムを作成するときに、ファイルのアドレスをそのアイテムに文字列として保存し、後でさまざまな悪意のある目的で取得したいと思います。
MicrosoftドキュメントのTVITEM構造を見ると、明らかLPARAM
に値を格納する場所です。
lParam
Type: LPARAM A value to associate with the item.
だから、私は先に進んでそれをしました:
TVITEM tvi;
tvi.mask = TVIF_TEXT;
tvi.pszText = const_cast<char *> (str0.c_str());
tvi.cchTextMax = sizeof(tvi.pszText);
tvi.lParam = (LPARAM) foo; // SETTING LPARAM HERE, foo IS A const char *
TVINSERTSTRUCT tvis;
tvis.item = tvi;
tvis.hInsertAfter = 0;
tvis.hParent = hti0;
// Send message to update tree, and return tree item.
return TreeView_InsertItem(tvw_filelist_, &tvis);
次に、自分の値を取得しようとすると...
HTREEITEM htiSel = TreeView_GetSelection(tvw_filelist_);
TVITEM tvItem;
tvItem.hItem = htiSel;
TreeView_GetItem(tvw_filelist_, &tvItem);
const char * info = (const char *) tvItem.lParam;
MessageBox(NULL, info, "Alert", MB_OK);
...ゴミが出て、ポインタがスコープから外れたか、仮眠を取っていることを示しています。そのポインタのサイズは常に4です。
これは私がやろうとしていることをする正しい方法ですか?もしそうなら、何が起こっているのですか?