Member 13089825 Ответов: 1

Перемещение элементов вверх и вниз в элементе управления listview


как перемещать предметы вверх и вниз
предположим, если выбран пункт 4 в представлении списка и выбрана кнопка вверх, то выбранный элемент должен переместиться наверх, а верхний элемент должен занять 4-е место.

Что я уже пробовал:

Я новичок в МФЦ так что понятия не имею
поэтому я читаю об этом как реализовать

1 Ответов

Рейтинг:
2

Jochen Arndt

Вы должны обменять предметы. Получите содержимое элемента по индексу (индекс 0 и 3 в вашем примере) в переменные и установите их с помощью другой переменной.

Как это сделать, зависит от вашего стиля списка (отчет или нет) и объема информации, хранящейся в каждом элементе (текст, изображение, флажок, пользовательские данные).

Для списка отчетов вы также должны перебирать столбцы и обмениваться текстом для каждого столбца.

Видеть Класс CListCtrl[^] для функций, которые будут использоваться. Кандидаты есть GetItemText и SetItemText для текста (Текст столбцов с режимом отчета), GetItemData и SetItemData для пользовательских данных или GetItem и SetItem для нескольких настроек (изображение, состояние, текст, формат).

Пример (предполагая, что код является частью CListView производный класс):

/* Top item */
int item1 = 0;
/* Selected item (single selections only) */
int item2 = GetListCtrl().GetNextItem(-1, LVNI_SELECTED);
/* Get data for item1 and item2 into variables */
/* Set data */
/* For report style: */
int columns = GetListCtrl().GetHeaderCtrl().GetItemCount();
for (int i = 0; i < columns; i++)
{
    CString str1 = GetListCtrl().GetItemText(item1, i);
    CString str2 = GetListCtrl().GetItemText(item2, i);
    GetListCtrl().SetItemText(item1, i, str2);
    GetListCtrl().SetItemText(item2, i, str1);
}
// Optionally change selection state