我想制作一个当用户触摸屏幕时自动显示的应用程序。它不应该适用于点击。我查找了 Windows 7/8 中的触摸处理程序。但我看到每个触摸窗口都必须用RegisterTouchWindow注册
TL;DR
有没有办法获得窗口外的触摸点位置(全局)?
Windows 8 应用程序不再需要注册 Touch Window。
据我所知,有几种方法可以实现您的目的,但有一些限制。
这篇文章在这里 http://www.codeproject.com/Articles/381673/Using-the-RawInput-API-to-Process-MultiTouch-Digit适用于 Win 7 和 8。但需要供应商 ID 和触摸屏的产品 ID。您的应用程序可能无法在某些触摸设备上正常运行。
Use 注册指针输入目标 http://msdn.microsoft.com/library/windows/desktop/hh454911%28v=vs.85%29.aspx在Win 8上。从我的调试来看,windows 8的触摸机制有其独特的特点。在触摸按下和触摸抬起之间,所有触摸事件都会发送到接收到第一个触摸事件的窗口,无论该窗口是最小化还是被另一个窗口覆盖,或者后期设置了 WS_EX_TRANSPARENT 属性。如果第一个窗口被销毁,则按下和释放之间的触摸事件只能共享到另一个窗口。使用此 API,所有触摸事件都将发送到注册的窗口。其他窗口无法再接收触摸事件,直到取消注册指针输入目标 http://msdn.microsoft.com/en-us/library/windows/desktop/hh454915%28v=vs.85%29.aspx由注册的窗口调用,或者通过使用将触摸输入注入回系统注入触摸输入 http://msdn.microsoft.com/en-us/library/windows/desktop/hh802881%28v=vs.85%29.aspx。 “注册的输入目标注入的输入不会被拦截。”请注意,使用此 API 需要 UI 访问权限。可以在以下位置找到示例:here http://video.ch9.ms/build/2011/slides/APP-189T_Humphrey.pptx.
窗户挂钩。对于 Win 7/8 上的桌面应用程序,可以通过使用轻松挂钩触摸事件设置WindowsHookEx http://msdn.microsoft.com/en-us/library/ms644990%28VS.85%29.aspx与 WH_CALLWNDPROC 或 WH_GETMESSAGE。对于Win 8上的metro应用程序,在窗口的消息循环中只能检测到第一个指针事件。虽然指针事件可以通过单击或点击来发生,获取指针类型 http://msdn.microsoft.com/library/windows/desktop/hh454892%28v=vs.85%29.aspx可以告诉您它是触摸指针还是鼠标指针。使用钩子的示例可以在以下位置找到here http://msdn.microsoft.com/en-us/library/ms644960%28VS.85%29.aspx.
处理指针事件的代码片段:
switch(Msg)
{
...
case WM_POINTERENTER:
case WM_NCPOINTERDOWN:
case WM_NCPOINTERUP:
case WM_NCPOINTERUPDATE:
case WM_POINTERACTIVATE:
case WM_POINTERCAPTURECHANGED:
case WM_POINTERDOWN:
case WM_POINTERLEAVE:
case WM_POINTERUP:
case WM_POINTERUPDATE:
{
UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
POINTER_INPUT_TYPE pointerType;
if (GetPointerType(pointerId, &pointerType))
{
if (pointerType == PT_TOUCH)
{
...
}
}
}
break;
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)