http://blog.csdn.net/vlily/article/details/7739483
备注:第五种方法已经试过,其余没试过,感觉是对的(第二种方法是错误的 )
CListCtrl选中行有两种属性情况,如果设置了Single Selection为TRUE,则只能单选,否则为多选(默认)。
方法一: int CListCtrl::GetSelectionMark(); 返回值:返回选中索引号,否则返回-1 说明:这个函数可以处理单行的情况,但是有一个缺点,它会保留你上次选中的项,所以当你单击空白的地方时,还会返回上次选中的项。因此在使用快捷键实现删除操作时需要注意这个情况,一般可以配合UINT GetItemState(int nItem, UINT nMask) const;来判断。 单行:int nItem = m_listCtrl.GetSelectionMark(); m_listCtrl.DeleteItem(nItem); 方法二: 此种方法完全错误!!!!!!!!!!! 说明:这个可以处理单行和多行(连续)的情况POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();if (pos == NULL){TRACE(_T("No items were selected!\n"));}else{while (pos){int nItem = m_listCtrl.GetNextSelectedItem(pos);m_listCtrl.DeleteItem(nItem);// you could do your own processing on nItem here}}
方法三: 说明:可以处理单行和多行的情况,个人一般用这种方法
while(m_listCtrl.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED) != -1){int nItem = m_listCtrl.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED);m_listCtrl.DeleteItem(nItem);}方法四:说明:可以处理单行和多行的情况for(int i = 0; i= 0 &&nSelItem