1

我想为纯 WinAPI 程序实现类似触摸滚动的行为。我已经花了几天了。

到目前为止,我尝试了几种方法。最成功的是使用 EnableWindow(hwnd, false) 禁用整个窗口,然后捕获所有鼠标事件并将它们分派给子级。我可以使用 GetCursorPos/GetTopWindow/GetNextWindow 找到所有孩子。但现在它只适用于按钮和其他简单的东西。EDIT 控件不会响应,因为它处于禁用状态(因为整个窗口都被禁用)。

我也试过 WM_PARENTNOTIFY。但这不起作用,因为当您收到此消息时,您无法阻止孩子立即收到它。对于触摸滚动,您需要它。

这令人沮丧。我认为唯一的选择是对鼠标消息进行一些低级拦截。能够将它们排队,然后在实际滚动发生时发送给子级或丢弃。但是如何做到这一点呢?我需要的是在它进入子树之前在主窗口中获取鼠标事件,并且如果我想进入子树,则能够在某些条件下停止此事件。

没有它我只能考虑使用键盘修饰符。因此,当用户按下 CONTROL(例如)时,整个窗口将被暂时禁用,所有鼠标事件都将进入滚动状态。但这是最后的手段。我希望有准确的“电话”行为,这样如果您按下鼠标按钮并在 100 毫秒内开始移动 - 它会滚动,如果在 100 毫秒内没有检测到移动,那么事件就会正常进行。

我的跨平台库需要这个,我希望它在包括 Windows XP 在内的所有平台上都能正常工作。

谢谢你。

4

0 回答 0