我将一堆项目添加到树视图中,其中存储了一个字符串lParam
,如下所示:
TVITEM tvi = {sizeof(TVITEM)};
tvi.mask = TVIF_TEXT | TVIF_PARAM;
tvi.pszText = const_cast<char *> (txt0.c_str()); // Display text
tvi.cchTextMax = sizeof(tvi.pszText);
tvi.lParam = (LPARAM) add0.c_str(); // A file path string
TVINSERTSTRUCT tvis;
tvis.item = tvi;
tvis.hParent = hti0; // Some parent node
TreeView_InsertItem(tvw_filelist_, &tvis);
添加完所有这些后,我回来检查(在不同的函数中):
TVITEM tvi = {sizeof(TVITEM)};
char buf[200];
tvi.pszText = buf;
tvi.cchTextMax = 200;
tvi.hItem = htiTemp; // htiTemp is the current node in the iteration
tvi.mask = TVIF_TEXT | TVIF_PARAM;
// Retrieve; address is stored in lParam.
TreeView_GetItem(tvw_filelist_, &tvi);
char out[200];
strcpy(out, "Checking: PSZTEXT: ");
strcat(out, tvi.pszText);
strcat(out, ". LPARAM: ");
strcat(out, (const char *) tvi.lParam);
...并且 LPARAM 已重置为最后添加的项目的值。
所以,如果我添加one, two, three, four
具有相似lParam
值的项目,那么在我检查它们都lParam
具有four
. (有时,会有垃圾值。)
这里显然有问题,而且可能很容易修复,但经过几个小时的试验,我找不到问题所在。帮助!