我想删除ListView中所有选定的行。写了下面这些:
POSITION pos = list.GetFirstSelectedItemPosition();
if (pos == NULL)
AfxMessageBox("No items were selected!");
else
{
   while (pos)
   {
int nItem = list.GetNextSelectedItem(pos);
list.DeleteItem(nItem);
   }
}
但是结果不对。应该是因为删除前面一行后,导致后面一行的nItem变化,但是我搞不清楚这个POSITION它是怎么给的。这种问题应该怎么解决?

解决方案 »

  1.   

    先获得选中的item数目
    然后malloc一个int数组,将选中的item的序号填进去
    接着,从这个数组的尾部向前一个一个delete之
    这样先删除的都是后面的,不会影响前面的序号的变化
      

  2.   

    下面的代码是我以前用过的,应该没问题,试一试!!
    UINT i, uSelectedCount = m_ImgList.GetSelectedCount();
    POSITION pos = m_ImgList.GetFirstSelectedItemPosition();
    int  nItem = -1;
    if (uSelectedCount > 0)
    {
    for (i=0;i <uSelectedCount;i++)
    {
    nItem = m_ImgList.GetNextItem(-1, LVNI_SELECTED);
    //ASSERT(nItem != -1);

    m_ImgList.DeleteItem(nItem); }
    }
      

  3.   

    要从后面删除的:
    int i,iState;
    int nItemSelected=m_ListCtrl.GetSelectedCount();//所选表项数
    int nItemCount=m_ListCtrl.GetItemCount();//表项总数
    if(nItemSelected<1) return;
    for(i=nItemCount-1;i>=0;i--){
    iState=m_ListCtrl.GetItemState(i,LVIS_SELECTED);
    if(iState!=0) m_ListCtrl.DeleteItem(i);
    }