码迷,mamicode.com
首页 > 其他好文 > 详细

Clistctrl多行删除总结

时间:2016-01-04 22:32:10      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:

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<m_listCtrl.GetItemCount(); i++)
{
if(m_listCtrl.GetItemState(i, LVNI_ALL | LVNI_SELECTED) == LVIS_SELECTED)
m_listCtrl.DeleteItem(i);
}

方法五:

 POSITION sSelPos = NULL;

 while(sSelPos =m_listctrl.GetFirstSelectedItemPosition())
 {
       int nSelItem = -1;
        nSelItem = m_listctrl.GetNextSelectedItem(sSelPos);

        if(nSelItem >= 0 &&nSelItem<m_listctrl.GetItemCount())
      {

            好了,这个nSelItem 就是我们要的DD

     }

}

 

Clistctrl多行删除总结

标签:

原文地址:http://www.cnblogs.com/rechen/p/5100314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!