我已经在桌面触摸屏上使用Windows 8 Touch API( WM_POINTERDOWN / WM_POINTERUPDATE / WM_POINTERUP )工作了一段时间。然后我在Windows 8平板电脑上尝试了我的测试程序,发现我的应用程序无法准确检测用户触摸屏幕的位置。
另一方面,使用鼠标,工作正常:我得到了正确的坐标。由于我将 EnableMouseInPointer(TRUE)模式激活,这意味着正在使用相同的代码来处理鼠标事件和触摸事件,这至少意味着我的代码在某种程度上正常工作。
我发现,平板电脑启用了高DPI模式,使用户可以触摸屏幕上非常小的内容。当我更改平板电脑上的DPI以删除缩放时,我的应用程序工作正常,当我在桌面屏幕上加载DPI时出错了。 (是的,我的应用程序是高DPI意识)
令人讨厌的是,我从触摸界面收到的坐标显然与使用的设备不同:
那么,处理这个问题的正确方法是什么?
一个明显的黑客方法是检查 POINTER_INFO 结构的 pointerType 成员,并根据类型应用一些重新缩放( PT_TOUCH 或 PT_MOUSE ),但据我所知,它没有记录在任何地方,例如我不知道是否应该重新调整 PT_PEN 。
这似乎不是很优雅和未来的证据。
欢迎任何有关如何干净利落的建议。
答案 0 :(得分:0)
如果您的进程以不同的DPI感知级别运行(私有,进程间通信未虚拟化),则可以跨进程运行“SetParent”,以便从新父级继承DPI感知级别。 http://msdn.microsoft.com/en-us/library/windows/desktop/dn469266(v=vs.85).aspx#input_issues