ListView_GetNextItem始终返回0

ListView_GetNextItem always returning 0

本文关键字:返回 GetNextItem ListView      更新时间:2024-09-24

我有一些代码当前会导致无限循环,但我找不到原因。

该代码设计用于根据列表框中选择的项在整数上设置位标志。这是由While循环中的case语句处理的。

我在调试器上跟踪了代码,selectedItem的值从未更改。列表框的句柄似乎是有效的,并且使用相同的句柄填充。

我已经尝试使用SendMessage函数和ListView_GetNextItem宏,前者在我的代码中被注释掉了。

任何帮助都将不胜感激,我想我在这里错过了一些明显的东西!

编辑:我把这个循环建立在这里的基础上:win32从列表视图中检索所有选定项目的索引

int getTypeStatus()
{
int retVal =0;
//int selectedItem = SendMessage(lstFileStatus, LVM_GETNEXTITEM, (WPARAM)-1, MAKELPARAM(LVIS_SELECTED,0));
int selectedItem = ListView_GetNextItem(lstFileStatus,-1, LVNI_SELECTED);
while (selectedItem != -1)
{
switch (selectedItem){
case 0:
retVal = retVal | NOT_VERIFIED;
break;
case 1:
retVal = retVal | IRRELEVANT;
break;
case 2:
retVal = retVal | NOT_IN_LIST;
break;
case 3:
retVal = retVal | CONFIRMED;
break;
case 4:
retVal = retVal | NOT_CONFIRMED;
break;
case 5:
retVal = retVal | NEWLY_IDENTIFIED;
break;
case 6:
retVal = retVal | MISMATCH_DETECTED;
break;
}
selectedItem = ListView_GetNextItem(lstFileStatus,selectedItem, LVNI_SELECTED);
}
return retVal;
}

编辑:还包括创建控制和填充(工作(的代码

lstFileStatus = CreateWindowEx(0,"ListBox","",WS_CHILD|WS_VISIBLE|LBS_NOTIFY|WS_BORDER|LBS_EXTENDEDSEL,LeftHandStartX,TypeLineY,130,170,hwnd,(HMENU)IDC_LBX_TYPESTATUS,GetModuleHandle(NULL),0);
if (!lstFileStatus) {outputControlOutputError("lstFileStatus");}
for (int i=0;i<numTypeStatus;i++)
{
SendMessage(lstFileStatus,LB_ADDSTRING,0,(LPARAM)arrayTypeStatus[i]);
}

LVM_GETNEXTITEM是一个listview控件消息,但您的控件是一个列表框。它们是不同的控件,消息不可交换。

要从多选列表框中获取所选项目,您需要使用LB_GETSELCOUNT来获取选择的数量,分配一个大小为int的数组,然后使用LB_GETSELITEMS来获取选择索引。