1

列表控件可以接收到触摸事件,但是按钮不能接收到触摸事件,它总是接收到鼠标移动事件。

我想将触摸事件发送给按钮的父级,如何解决这个问题?

下面的代码可以判断它是鼠标事件还是触摸事件,但不能将事件转发给其父级以处理触摸事件。#define MOUSEEVENTF_FROMTOUCH 0xFF515700

if ((GetMessageExtraInfo() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) { 
// Click was generated by wisptis / Windows Touch
}else{ 
// Click was generated by the mouse.
}

顺便说一句,如何停止将触摸事件转换为鼠标事件?

4

2 回答 2

2

使用 WM_TOUCH/WM_GESTURE 您可以获得触摸输入事件列表的句柄。TOUCINPUT数据并非专用于特定窗口。与GESTUREINFO不同。但是翻译信息应该不复杂。

传递给 DefWindowProc 的未处理 WM_GESTURE 消息将传播到父窗口。在窗口之间转发手势消息时,避免从父窗口向子窗口发送消息,以防止出现闭环。 http://msdn.microsoft.com/en-us/library/ee220935.aspx

对于 WM_TOUCH 消息,您可以使用用户定义的消息并将带有 lParam 值的消息发布到按钮的父级。但是您必须在那里处理此消息并且需要调用CloseTouchInputHandle

如果您不将 WM_TOUCH/WM_GESTURE 消息传递给 DefWidnowProc,则不会进行进一步的翻译。

触摸事件在 DefWindowProc 处理中被转换为鼠标消息。此处列出了支持哪些手势并将其转换为鼠标消息。

于 2013-11-12T10:48:37.863 回答
0

列表控件可以接收到触摸事件,但是push button或者textedit不能接收到触摸事件,它总是接收到鼠标移动事件。

下面的代码可以判断它是鼠标事件还是触摸事件,但是当上下滑动一段时间时,它无法接收到事件。

然后左右轻弹总能收到鼠标移动事件

#define MOUSEEVENTF_FROMTOUCH 0xFF515700

if ((GetMessageExtraInfo() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) { 
// Click was generated by wisptis / Windows Touch
}else{ 
// Click was generated by the mouse.
}

我将此按钮放在具有垂直滚动条的滚动视图中。

于 2013-11-18T10:07:49.063 回答