Winapi ListView_DeleteItem循环只删除它应该删除的项目的一半

Winapi ListView_DeleteItem循环只删除它应该删除的项目的一半,winapi,visual-c++,activex,Winapi,Visual C++,Activex,我在activex控件中有一个列表视图,其中包含大约700项。发生筛选事件时,将使用下面的代码从列表视图中删除项目,只留下几个筛选项目。我注意到700个项目中的前300个成功删除,而其余的则无法删除(ListView_DeleteItem返回false)。在对代码的后续调用中,应删除的剩余项目的一半被删除,然后再删除一半。最终,应删除的所有项目都已删除,但可能需要5到6次对下面的循环的调用 for (size_t rowNum=0; rowNum < toDelete.size()

我在activex控件中有一个列表视图,其中包含大约700项。发生筛选事件时,将使用下面的代码从列表视图中删除项目,只留下几个筛选项目。我注意到700个项目中的前300个成功删除,而其余的则无法删除(ListView_DeleteItem返回false)。在对代码的后续调用中,应删除的剩余项目的一半被删除,然后再删除一半。最终,应删除的所有项目都已删除,但可能需要5到6次对下面的循环的调用

    for (size_t rowNum=0; rowNum < toDelete.size() ; rowNum ++)
{
    bool result = ListView_DeleteItem(listCtrl, rowNum);
}
for(size\t rowNum=0;rowNum
试试这个:

for (size_t rowNum=0; rowNum < toDelete.size() ; rowNum ++)
{
    bool result = ListView_DeleteItem(listCtrl, 0);
}
循环的第一步:删除索引为0的项(项1),列表如下所示:

Item 2
Item 3
Item 4
Item 2
Item 4
循环的第二步:删除索引为1的项(现在是项3),列表如下所示:

Item 2
Item 3
Item 4
Item 2
Item 4

依此类推。

反向循环,使顺序索引与以前删除的项目无关?这就解决了问题,谢谢。解释ListView_DeleteItem返回0的原因,索引必须远远超过列表的实际长度