c++ - 重新排列 ListView 项

标签 c++ winapi listview

假设我有一个包含多个项目的 ListView 控件。我如何允许用户拖放项目以在控件中重新排列它们。

listview控件为报 TableView ,全行选择扩展样式。

提前致谢。

最佳答案

在您的 ListView 的 WM_LBUTTONDOWN 处理程序中,将当前选定的项目索引存储在某处。

在您的 ListView 的 WM_LBUTTONUP 处理程序中,使用 ListView_HitTest() 确定光标下的项目。如果与存储的索引不同,则使用 ListView_DeleteItem()ListView_InsertItem() 将“拖动”的项目“移动”到新索引。

(可选)为了帮助用户查看项目被“拖”到哪里,在您的 ListView 的 WM_MOUSEMOVE 处理程序中,使用 ListView_HitTest() 来确定哪个项目是在光标下,然后使用 ListView_SetItemState() 为先前“突出显示”的项目(如果有)禁用/启用 LVIS_DROPHILITED 状态并“突出显示”当前项目。

关于c++ - 重新排列 ListView 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3693362/

相关文章:

listview - [UWP][XAML] ListView 子项未使用全宽

java - 仅在填充的 ListView 中显示模型

c++ - boost 翻译: po file not work

c++ - 我需要什么条件才能进一步增加 5% 的折扣?

c++ - 从 32 位进程挂接 64 位进程时,SetWindowsHookEx() 不会返回错误?

c++ - 如何在 64 位版本的 Windows 中调用 SetWindowLong()?

asp.net - 是否可以在 ASP.NET ListView 控件中进行自定义分组?

c++ - 修改传递给该函数内部可变参数函数的参数

c++ - 在gtest中,如何将lib文件添加到可执行测试文件

c++ - 32 位 int 类型的 Win API 互锁操作