Показать сообщение отдельно
Старый 08.02.2023, 00:21   #3
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от 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);  // Удаление элемента с конца списка (список уже упорядочен по возрастанию)
                            } 
                        }
macomics вне форума Ответить с цитированием