CString str;
int CurSel=m_list.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED);
if(CurSel>=0)
{
str=m_list.GetItemText(CurSel,3);
DeleteFile(str);
m_list.DeleteItem(CurSel);
}
这个是删除选中的单行的。
将list设置为可多选后,再删除只能删除选中的第一个Item
求助,如何删除选中的多行。

解决方案 »

  1.   

    void CListCtrlDlg::OnButton1() 
    {
    CUIntArray arDelItem ;
    //收集要删除的项
    POSITION  pos = m_list.GetFirstSelectedItemPosition() ;
    while( NULL != pos )
    {
    int iSel = m_list.GetNextSelectedItem(pos);
    if( -1 != iSel )
    arDelItem.Add(iSel);
    }
    //一定要从后向前删
    for(int i = arDelItem.GetUpperBound() ;  i >= 0 ; i-- )
    {
    int iSel = arDelItem[i] ;
    m_list.DeleteItem(iSel);
    }
    }
      

  2.   

    技术可行,符合你的要求吗?更多内容敬请访问
    个人网站
    博客
    本人花了6个月的拙作<<深入浅出——Visual C++入门、进阶与应用实例 >>
    如果问题解决,请及时结帖,这是对我们的鼓舞。
      

  3.   


    POSITION pos = GetListCtrl().GetFirstSelectedItemPosition();
       

    while (pos)
    {


    int iSelItem = GetListCtrl().GetNextSelectedItem(pos);
    GetListCtrl().DeleteItem(iSelItem);
            pos = GetListCtrl().GetFirstSelectedItemPosition();
    }
      

  4.   

    你的思路也是对的。
    void CListCtrlDlg::OnButton2() 
    {
    CUIntArray arDelItem ;
    int   CurSel=m_list.GetNextItem(-1,LVNI_ALL   |   LVNI_SELECTED); 
    while(CurSel >=0) 

    arDelItem.Add(CurSel) ;
    CurSel=m_list.GetNextItem(CurSel,LVNI_ALL   |   LVNI_SELECTED);

    // TODO: Add your control notification handler code here
    //一定要从后向前删
    for(int i = arDelItem.GetUpperBound() ;  i >= 0 ; i-- )
    {
    int iSel = arDelItem[i] ;
    m_list.DeleteItem(iSel);
    }
    }