リストコントロールでは、アイテムをすべてインデックスで指定します。
そのため、上の方のアイテムを削除すると、それより下のアイテムは前方に詰められてインデックスが変わってしまいます。
選択されているアイテムを順にたどるための関数が提供されていますが、それもインデックスがずれることによって、うまく動作しません。これに対処するには、以下のように毎回先頭から選択されたアイテムを検索する必要があります。
while(1)
{
pos = listCtrl.GetFirstSelectedItemPosition();
if(!pos) break;
int nItem = listCtrl.GetNextSelectedItem(pos);
listCtrl.DeleteItem(nItem);
}
それか、末尾から順番に選択されたアイテムを削除していくことも出来ます。
for(int nItem=listCtrl.GetItemCount()-1; nItem >=0; nItem--)
{
if(listCtrl.GetItemState(nItem, LVIS_SELECTED))
listCtrl.DeleteItem(nItem);
}