在网上搜索了下,结果不怎么理想,很多类似的答案:
POSITION pos = pList-> GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0( "No items were selected!\n ");
else
{
while (pos)
{
int nItem = pList-> GetNextSelectedItem(pos);
pList-> DeleteItem(nItem);
}
}
但是实际测试这样是不行的,如
第一行文本
第二行文本
第三行文本
第四行文本
如果选择1,2,删除后剩下的是
第二行文本
第四行文本
那是因为删除第一行后,这时第二行成为了第一行,再准备删除第二行,就删除到原来的第一行。然后我就想了一个,递归实现,从后面删起,就不会受变动影响:
void CMyDlg::OnDelReply()
{
POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
if (pos == NULL)
{
return;
}
DelReplyWithPosition(pos);
}
void CMyDlg::DelReplyWithPosition(POSITION pos)
{
int iItemIndex = m_ListCtrl.GetNextSelectedItem(pos);
if (pos != NULL)
{
DelReplyWithPosition(pos);
m_ListCtrl.DeleteItem(iItemIndex);
}
else
{
m_ListCtrl.DeleteItem(iItemIndex);
}
}