C++ 如何将userdata附加到listview中的每个项?C++;Win32
我在想我可以使用LVITEM结构LPARAM来附加一个指向我的类的指针,但我似乎无法让它工作 以下是我的代码的主要部分: 创建listview:C++ 如何将userdata附加到listview中的每个项?C++;Win32,c++,api,winapi,C++,Api,Winapi,我在想我可以使用LVITEM结构LPARAM来附加一个指向我的类的指针,但我似乎无法让它工作 以下是我的代码的主要部分: 创建listview: hlvQuiz = CreateChild(WC_LISTVIEW, "", WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | LVS_ICON | LVS_AUTOARRANGE, 0, 0, 320, 240, m_hwnd, FontNormal); 添加项目: if (vQui
hlvQuiz = CreateChild(WC_LISTVIEW, "",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | LVS_ICON | LVS_AUTOARRANGE,
0, 0, 320, 240, m_hwnd, FontNormal);
添加项目:
if (vQuizes.size() > 0)
{
LVITEM lvi;
lvi.mask = LVIF_TEXT | LVIF_PARAM;
lvi.iItem = 0;
lvi.iSubItem = 0;
lvi.cchTextMax = QUIZSTRLEN;
for (unsigned int i = 0; i < vQuizes.size(); i++)
{
lvi.lParam = (LPARAM)&vQuizes[i]; // adding pointer to lparam
lvi.pszText = vQuizes[i].szName;
ListView_InsertItem(hlvQuiz, &lvi);
}
}
我做错什么了吗?listview创建得很好,项也添加了,但是我放在LPARAM值中的指向我的类的指针似乎被忽略了,或者在我去引用它时被更改了我以前没有在这么低的级别上工作过,但是我怀疑您需要将LVITEM结构的掩码成员设置为LVIF_PARAM调用ListView_GetItem时(以及您需要的任何其他内容的适当值)。您的代码在调试模式下工作正常,但在发布模式下工作不正常,因为 您没有在
lvi.mask
中指定LPARAM的名称(以及要返回的任何其他字段的名称)
试试这个:
lvi.iItem = ListView_GetNextItem(hlvQuiz, -1, LVNI_SELECTED);
lvi.mask = LVIF_PARAM;
if (ListView_GetItem(fm->hlvQuiz, &lvi) == TRUE) ...
您将收到一份您设置的LPRAM值的副本。我认为这种奇怪的行为是由于调试模式的帮助,它为您初始化了所有内容。而发布模式则没有
lvi.iItem = ListView_GetNextItem(hlvQuiz, -1, LVNI_SELECTED);
lvi.mask = LVIF_PARAM;
if (ListView_GetItem(fm->hlvQuiz, &lvi) == TRUE) ...