Clistctrl多行删除总结
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 } }
发现自己的不足,善于利用找到的方法去扬长避短。行动起来。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步