列表控件可以接收触摸事件,但按钮无法接收触摸事件,它总是收到鼠标移动事件。
我想将触摸事件发送给按钮的父母,如何解决这个问题?
像下面这样的代码可以判断它是鼠标还是触摸事件,但不能将事件转发给它的父代来处理触摸事件。 #define MOUSEEVENTF_FROMTOUCH 0xFF515700if ((GetMessageExtraInfo() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) {
// Click was generated by wisptis / Windows Touch
}else{
// Click was generated by the mouse.
}
顺便说一句,如何停止将触摸事件转换为鼠标事件?
答案 0 :(得分:2)
使用WM_TOUCH / WM_GESTURE,您可以获得触摸输入事件列表的句柄。 TOUCHINPUT数据不专用于特定窗口。与GESTUREINFO不同。但翻译信息应该不复杂。
传递给DefWindowProc的未处理的WM_GESTURE消息将传播到父窗口。在Windows之间转发手势消息时,请避免从父窗口向子窗口发送消息,以防止发生闭环。 http://msdn.microsoft.com/en-us/library/ee220935.aspx
对于WM_TOUCH消息,您可以使用用户定义的消息,并将此消息与lParam值一起发布到按钮的父级。 但您必须在此处理此消息,并且需要致电CloseTouchInputHandle
如果您没有将WM_TOUCH / WM_GESTURE消息传递给DefWidnowProc,则不会进行进一步的翻译。
触摸事件在DefWindowProc处理中转换为鼠标消息。 here列出了支持哪些手势并转换为鼠标消息。
答案 1 :(得分:0)
列表控件可以接收触摸事件,但是按钮或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.
}
我将此按钮放在具有垂直滚动条的滚动视图中。