当手写笔在平板电脑上"举起"时会发生什么?
我正在使用VC ++ / Win32 / MFC中的旧项目。最近,要求该应用程序可以在平板电脑上运行,这带来了许多新问题。
我已经能够解决这些问题,并且可以解决一些问题,但是我可以使用其中的一些专家建议。
我有一个特定的错误,该错误是由手写笔从活动表面"抬起"引起的。基本上,鼠标光标消失,然后在我们将其"按"回到屏幕上时再次出现。
这在应用程序中没有说明是有道理的。我们无法在台式机上移动光标。因此,我所寻找的是关于升降机发生时会发生什么情况的良好概述(根据Windows消息等)。这是否仅意味着关注更改和鼠标悬停事件?我的错误似乎也涉及游标更改(尽管可能与提升无关)。当然,意外的"提升"正在破坏应用程序的工具处理状态。
因此,有形的问题是:
- 手写笔"抬起"时会发生什么?媒体?
- 可以使用哪些API调用来检测到这一点?它只是转换为带有标志/值设置的标准消息吗?
- 当开发电脑是台式机时,有什么好的方法可以测试/模拟这种情况?我只是在这里瞎瞎吗? (我只能定期访问平板电脑)
- 什么代表平板电脑触控笔识别的正确行为或者最佳做法?
感谢考虑,
ee
解决方案
回答
作为平板电脑用户,我可以回答一些问题。
第一的:
You cannot very easily keep a "keyboard focus" on a window when the stylus has to trail out of the focused window to push a key on the virtual keyboard.
我使用的大多数虚拟键盘(Windows平板电脑输入面板和ubuntu下的一个虚拟键盘)都允许他们输入程序来保持"键盘焦点"。
What happens when a stylus "lift" occurs? A press?
在Windows下,压力值会下降,但除此之外,没有任何事件。 (我不了解linux。)
What API calls can be used to detect this? Does it just translate into standard messages with flags/values set?
如上所述,如果可以获得压力值,则可以使用该值。
Whats a good way to test/emulate this when your development pc is a desktop? Am I just flying blind here? (I only have periodic access to a tablet pc)
当笔针放置在其他位置时,指针的全局坐标会更改,因此,我们可以使用任何允许我们更改全局指针值的方法来模拟指针的突然移动。 (Java中的Robot类使此操作相当容易。)
What represents correct behavior or best practice for tablet stylus awareness?
我建议我们阅读Microsoft所说的话,MSDN网站上有许多出色的文章。 (http://msdn.microsoft.com/zh-cn/library/ms704849(VS.85).aspx)
我要指出的是,应用程序上按钮的大小会产生很大的不同。
希望这对我们有所帮助。
回答
据我了解,没有"提升"事件-唯一的事件是在手写笔稍后返回到屏幕时发生。当然,这取决于特定驱动程序等等。
更糟糕的是,我们描述的错误可能仅用典型的鼠标即可再现。尝试尽可能快地移动鼠标-几乎可以肯定它会一次跳跃几个像素。如果我们将鼠标设置配置为最高的指针速度,则甚至几十个或者几百个。一个更新,鼠标可能在100,100。接下来的更新可能是200,300。
回答
Under Windows, the pressure value drops, but outside of that, there is no event. (I don't know about linux.)
在Linux下,我们将获得" ProximityEvents"
这些事件WT_PROXIMITY最有可能在Windows中出现(请参考:http://www.wacomeng.com/devsupport/ibmpc/wacomwindevfaq.html)
回答
@Greg需要说明的是,这是一台内置平板电脑和手写笔的笔记本电脑。该设备没有专用键盘(它是触摸屏上的虚拟键盘),不是wacom输入设备。对困惑感到抱歉。
似乎有一个Microsoft Windows XP Tablet PC Edition的SDK,它可能具有获取特殊详细信息(例如压力)的能力。但是,我知道必须与现有的非平板电脑感知应用程序保持某种程度的标准兼容性。我想我可以尝试在平板电脑上安装Spy ++,并尝试过滤特定的消息/事件。