В обработчике WM_LBUTTONDOWN
вашего ListView сохраните где-то текущий выбранный индекс элемента.
В обработчике WM_LBUTTONUP
вашего ListView используйте ListView_HitTest()
, чтобы определить, какой элемент находится под курсором. Если он отличается от сохраненного индекса, используйте ListView_DeleteItem()
и ListView_InsertItem()
, чтобы «переместить» перетаскиваемый элемент в новый индекс.
(Необязательно) Чтобы помочь пользователю увидеть, куда «перетаскивается» элемент, в обработчике WM_MOUSEMOVE
вашего ListView используйте ListView_HitTest()
, чтобы определить, какой элемент находится под курсором, затем используйте ListView_SetItemState()
, чтобы отключить / включить состояние LVIS_DROPHILITED
для ранее «выделенного» элемента (если есть) и «выделить» текущий элемент.