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
ます。(時々、ごみの値があります。)
ここには明らかに問題があり、修正するのはおそらく本当に簡単ですが、数時間の実験の後、何が悪いのかを見つけることができません。ヘルプ!