我的电脑有 2 个交替使用的输入设备 - 鼠标和图形输入板 (Wacom)。如您所知,鼠标生成相对坐标(类型为X +5 Y +1),而数位板生成绝对坐标(类型为X 567 Y 876)。Windows 获取它们并将它们转换为绝对值,然后再将它们发送到应用程序。
如何在事件处理程序中确定事件OnMouseMove来自哪个设备,以及新坐标是由相对输入设备还是绝对输入设备生成的?理想情况下 - 从输入设备查看“原始”事件。
我看到添加的标志ssTouch ssPen中有标志(内部调用MSDN),但似乎它们指的是平板电脑,而不是单个平板电脑作为输入设备。TShiftStateMouseOriginToShiftStateGetMessageExtraInfo
我也听说有RAWMOUSE structure (winuser.h)/ MOUSE_MOVE_RELATIVE(MOUSE_MOVE_ABSOLUTEMSDN ),但是怎么用还不清楚。
为“原始”事件注册一个监听器(否则它们不会出现)并订阅接收事件:
现在,在事件处理程序中,您可以获得“原始”数据,从中可以找到输入的详细信息。最好不要在这里输入输入本身,因为。它不是高贵的(例如,对于平板电脑,x / y 坐标不会投影到显示器上,而是从 0 到 65535,此外,如果我正确理解文档,则不会应用光标加速等)。
现在,有了 flag ,您可以根据类型
fLastInputMode更改处理程序中的逻辑:Panel1MouseMoveWinApi的方法和数据结构的描述在github上很容易找到,这里就不一一列举了。如果您对测试项目感兴趣 - https://github.com/Kromster80/raw_input_test/