MFC按钮无法接收触摸事件

时间:2013-11-12 10:17:22

标签: mfc touch mouse

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

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

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

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

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

2 个答案:

答案 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.
}

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