Цитата:
Сообщение от waleri
Удаляйте сначала последний элемент в списке - тогда индексы остальных не изменятся.
|
Может лучше удалять выделенный элемент с максимальным индексом, а не последний.
Т.е. вы получили количество выделенных строк int maxi = SendMessage(hListBox, LB_GETSELCOUNT, 0, 0);
Потом получаете массив индексов после int count = SendMessage(hListBox, LB_GETSELITEMS, maxi, (LPARAM)item);
А дальше просто перебирайте массив for (int i = count - 1; i >= 0; --i) SendMessage(hListBox, LB_DELETESTRING, item[i], 0);
Тут и цикл удаления показан
Цитата:
Код:
for (i = cSelItemsInBuffer - 1; i >= 0; i--) // Перебор полученного списка от последнего элемента к первому
{
SendMessage(hListBox, LB_GETTEXT,
aSelItems[i],
(LPARAM) pszFileToDelete);
fResult = DeleteFile(pszFileToDelete);
if (!fResult)
{
MessageBox(hDlg, L"Could not delete file.",
NULL, MB_OK);
}
else
{
SendMessage(hListBox, LB_DELETESTRING,
aSelItems[i], 0); // Удаление элемента с конца списка (список уже упорядочен по возрастанию)
}
}
|