如题

解决方案 »

  1.   

    CListCtrl* pListCtrl = (CListCtrl*) GetDlgItem(IDC_YOURLISTCONTROL);POSITION pos = pList->GetFirstSelectedItemPosition();
    if (pos == NULL)
       TRACE0("No items were selected!\n");
    else
    {
       while (pos)
       {
          int nItem = pList->GetNextSelectedItem(pos);
          TRACE1("Item %d was selected!\n", nItem);
          // you could do your own processing on nItem here
       }
    }msdn上的例子,参考一下吧,获得多个选中的
      

  2.   

    CListCtrl如何得知多个条目被选中
    ==GetSelectedCount()
      

  3.   

    如何一个一个获得这些条目
    ==有两个办法。
    一是用GetFirstSelectedItemPosition()和GetNextSelectedItem()两个函数配对,如一楼所例
    二是用GetNextItem函数循环。
    int nIdx = m_List.GetNextItem(-1,LVNI_SELECTED);
    while(nIdx != -1)
    {
        //nIdx为选中行索引
        ...
        //继续搜索
        nIdx = m_List.GetNextItem(nIdx,LVNI_SELECTED);
    }
      

  4.   

    补充方法(SDK)一个:int currentItemNum = ListView_GetItemCount(m_hWnd);

    for(int i=0;i<currentItemNum;i++)
    {
    LV_ITEM lvi;
    lvi.mask=LVIF_STATE;
    lvi.iItem=i;
    lvi.stateMask=0xFFFF;
    ListView_GetItem(m_hWnd,&lvi);
    DWORD ws = GetWindowLong(m_hWnd, GWL_STYLE);

    BOOL bSelected= (lvi.state & LVIS_SELECTED) || (lvi.state & LVIS_DROPHILITED); if(bSelected)
    {
    CString strIndex;
    strIndex.Format(_T("Index = %d"),i);
    AfxMessageBox(strIndex);
    }
    }
      

  5.   

    谢谢大家的回复,用以上各位所给的方法都可行,可是出了个问题:我对我选中的ITEM做删除操作,如此一来,当每删除一个条目后,再用GetNextSelectedItem()就会得不到正确的ITEM了,最后的结果是全删除操作不能把所有的ITEM删除,请问如何解决?
      

  6.   

    谢谢大家的回复,用以上各位所给的方法都可行,可是出了个问题:我对我选中的ITEM做删除操作,如此一来,当每删除一个条目后,再用GetNextSelectedItem()就会得不到正确的ITEM了,最后的结果是全删除操作不能把所有的ITEM删除,请问如何解决?
      

  7.   

    用我说的第二个方法:
    int nIdx = m_List.GetNextItem(-1,LVNI_SELECTED);
    while(nIdx != -1)
    {
        //nIdx为选中行索引
        m_List.DeleteItem(nIdx);
        //继续搜索
        nIdx = m_List.GetNextItem(nIdx-1,LVNI_SELECTED);
    }
    只需要将GetNextItem从nIdx改为nIdx-1即可