有谁知道如何解决这个问题 我想为列表中的每个选定项目执行代码
itemint=SendMessage(hwndList,LVM_GETNEXTITEM,-1,LVNI_SELECTED))
{
while (itemint != -1)
{
itemint =SendMessage(hwndList,LVM_GETNEXTITEM, itemint, LVNI_SELECTED);
////
}
无法从所选项目中找到第一个(具有最低索引)项目
答案 0 :(得分:4)
您的迭代代码本质上是正确的。问题是您在第二次调用SendMessage
后正在开展工作,这可以通过评论行的位置来证明。将工作移至第二次调用SendMessage
之前,您不会跳过第一个选定的项目。
itemint = SendMessage(hwndList, LVM_GETNEXTITEM, -1, LVNI_SELECTED))
{
while (itemint != -1)
{
// do work on selected item here
itemint = SendMessage(hwndList, LVM_GETNEXTITEM, itemint, LVNI_SELECTED);
}
}
对于它的价值,您的代码将错过第一个选定的项目,但也会向您显示索引为-1的最终项目。
答案 1 :(得分:1)
您无需调用SendMessage。像这样写循环。
for (itemInt = -1; (itemInt = SendMessage(hwndList, LVM_GETNEXTITEM, itemInt , LVNI_SELECTED)) != -1; )
{
// do work on selected item here
DoIt(itemInt);
}
答案 2 :(得分:0)
嗯,这在功能上与上面的例子相同。 ListView_GetNextItem只是一个方便的宏,它转换为SendMessage LVM_GETNEXTITEM。我喜欢这个可读性。
int itemint=-1;
while((itemint=ListView_GetNextItem(hwndList,itemint,LVNI_SELECTED))!=-1)
{
...
}
您将在CommCtrl.h中看到它的定义如下:
#define ListView_GetNextItem(hwnd, i, flags) \
(int)SNDMSG((hwnd), LVM_GETNEXTITEM, (WPARAM)(int)(i), MAKELPARAM((flags), 0))