CListCtrl* pListCtrl = (CListCtrl*) GetDlgItem(IDC_YOURLISTCONTROL); ASSERT(pListCtrl != NULL);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 } }
将列表控件的single select属性去掉即可选,选择时按着shift或ctrl键可多选; 以下程序循环处理被选中的行; POSITION pos=m_WORK.GetFirstSelectedItemPosition();//m_WORK为CListCtrl控件对象 if(pos==NULL) { MessageBox(""); return; } else { while(pos) { int nItem=m_WORK.GetNextSelectedItem(pos); } }
2,判断以行是否被选中。
加入说你要判断第n行,CListCtrl的对象为m_list;
那么如下代码可以工作:
bool IsSelected(int n)
{
LVITEM li;
li.mask = LVIF_STATE;
li.iItem = n;
li.iSubItem = 0;
if (m_list.GetItem(&li))
{
return li.state & LVIS_SELECTED;
}
return false;
}
ASSERT(pListCtrl != NULL);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
}
}
以下程序循环处理被选中的行;
POSITION pos=m_WORK.GetFirstSelectedItemPosition();//m_WORK为CListCtrl控件对象
if(pos==NULL)
{
MessageBox("");
return;
}
else
{
while(pos)
{
int nItem=m_WORK.GetNextSelectedItem(pos);
}
}
{
..........
}