介绍:
我正在实现列表视图项目的重新排列,而不使用 OLE 拖放。
PROBLEM:
我已经成功解决了大部分任务,除了当用户想要将项目放置在当前不可见的位置时向上/向下滚动之外。
问题:
我可以使用以下消息向上/向下滚动列表视图:
SendMessage(hwndListView, WM_VSCROLL, (WPARAM)SB_LINEUP, (LPARAM)0);
SendMessage(hwndListView, WM_VSCROLL, (WPARAM)SB_LINEDOWN, (LPARAM)0);
我需要你的建议来弄清楚何时何地我需要发送这些消息(我想应该在 WM_MOUSEHOVER 或类似的东西上完成?)。
我只是不知道在哪条消息上以及如何检查是否需要滚动。
我有兴趣实现拖放的默认滚动行为。
我为解决这个问题所做的努力:
我尝试使用 listview 命中测试,以便我可以检查LVHTT测试信息 https://msdn.microsoft.com/en-us/library/windows/desktop/bb774754(v=vs.85).aspx for LVHT_ABOVE
and LVHT_BELOW
但这对我不起作用。
单击列表视图时我永远无法获得这些值......
我在其他编程语言中找到了一些使用计时器来实现这一点的示例。当我写这篇文章时,我正在研究它们。
附加信息:
Listview处于报告模式,支持多选。
我正在处理以下消息:
LVN_BEGINDRAG // I create drag image here
WM_MOUSEMOVE // I update drag image here
WM_LBUTTONUP // I rearrange items here and perform cleanup
为了保持这篇文章的简短,我省略了 SSCCE。如果需要我可以发布它。如果需要更多信息,请发表评论。