gpt4 book ai didi

c++ - TVITEM LPARAM 存储字符串

转载 作者:行者123 更新时间:2023-11-27 23:20:35 26 4
gpt4 key购买 nike

我有一个树状 View ,列出了拖放到它上面的文件。

当我创建一个新的 treeview 项目时,我想将文件的地址作为字符串存储在该项目中,并在以后的某个时间点出于各种恶意目的检索它。

查看 Microsoft 文档中的 TVITEM structure,显然 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。

这是做我想做的事情的正确方法吗?如果是这样,发生了什么事?

最佳答案

当然,在想了很久的问题后,花点时间发布问题,答案会在几秒钟内出现。

原来 TVITEM 掩码需要包含 TVIF_PARAM,类似于 this question .

如果我把上面的代码改成:

tvi.mask = TVIF_TEXT | TVIF_PARAM;

它按预期工作。

不过,我仍然不确定这是否是 LPARAM 的推荐用途。

关于c++ - TVITEM LPARAM 存储字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13285126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com