我有一个树视图,列出了放在上面的文件。
当我创建一个新的树视图项目时,我想将文件的地址作为字符串存储在该项目中,并在以后为各种邪恶目的检索它。
查看 Microsoft 文档中的TVITEM 结构,显然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。
这是做我想做的事情的正确方法吗?如果是这样,发生了什么?