应用程序疑难解答
本节提供了针对常见问题的解决方法。
常规疑难解答
问题 | 我正在运行 Windows Server 2008,但 Windows Touch 功能工作不正常。 |
---|---|
原因 | 您未启用“桌面体验”功能。 |
解决方法 | 打开服务器管理器管理工具:单击“开始”,指向“管理工具”,然后单击“服务器管理器”。单击左列中的“功能”项。在“功能”部分中单击“添加功能”。选择“桌面体验”,单击“下一步”,然后单击“安装”。 |
问题 | 每当我将手指快速移过应用程序时,都会出现一个箭头,并且我的笔势或操作未正确注册。 |
---|---|
原因 | 在不需要划动功能的情况下启用了划动功能。 |
解决方法 | 在需要禁用划动功能时启用划动功能。有关禁用触笔画动功能的信息,请参见对使用滚动条进行平移的旧版支持。 |
问题 | 我无法区分鼠标输入和 Windows Touch 输入。 |
---|---|
原因 | 当用户在屏幕上单击时,Windows 会对旧版支持生成鼠标消息。 |
解决方法 | 可为 WM_LBUTTONDOWN 和 WM_LBUTTONUP 消息调用 GetMessageExtraInfo 以确定来源。以下代码演示如何执行此操作。
|
问题 | 如何在 Windows 7 上运行 Surface 应用程序? |
---|---|
原因 | Windows Touch 与 Microsoft Surface 不兼容。 |
解决方法 | 您需要将 Windows 7 平台或 Microsoft Surface 平台作为目标。 |
操作和延时疑难解答
问题 | 我的应用程序无缘无故地发生冻结情况。我在初始化我的对象接口时出现访问冲突情况。 |
---|---|
原因 | 在使用 IManipulationProcessor 或 IInertiaProcessor 接口时缺少对 CoInitialize 的调用。 |
解决方法 | 在不调用 CoInitialize 的情况下实例化 Windows Touch 组件对象模型 (COM) 对象会导致出现此情况。在将项目从使用笔势转换为使用操作或延时接口时,有时会发生此情况。 |
问题 | 我的对象在转换过程中出现了错误旋转。单指旋转无法正常工作。 |
---|---|
原因 | 为对象设置的转轴不正确。 |
解决方法 | 您未正确设置操作枢轴点。将 PivotPointX 和 PivotPointY 属性设置为对象中心或要绕其旋转的点,并将 PivotRadius 属性设置为对象的半径。 |
Windows Touch 输入疑难解答
问题 | 我在处理 WM_TOUCH 消息之后,再也无法获取边界反馈。 |
---|---|
原因 | 在未处理 WM_TOUCH 消息的情况下就使用它。 |
解决方法 | 您可能使用 Windows Touch 消息而不将其转发给 DefWindowProc,这将导致发生意外行为。有关如何正确处理 WM_TOUCH 消息的更多信息,请参见 Windows Touch 消息入门。 |
问题 | 我已包含 windows.h,但仍显示未定义 WM_TOUCH。 |
---|---|
原因 | Targetver.h 中的 Windows 版本不正确。 |
解决方法 | 您未在对象中设置正确的 Windows 版本。以下代码演示如何在 Windows 7 中为 Windows Touch 设置正确的 Windows 版本。
|
问题 | 我的触控输入 x 坐标和 y 坐标似乎无效。它们要么为大于期望值的值,要么为负值。 |
---|---|
原因 | 您可能需要将触控点转换为像素,或者可能需要转换屏幕坐标。 |
解决方法 | 确保您正在调用 TOUCH_COORD_TO_PIXEL 和 ScreenToClient。以下代码演示如何执行此操作。
注意 若要使用 ScreenToClient 函数,您的应用程序必须支持高 DPI。有关支持高 DPI 的更多信息,请参见 MSDN 的高 DPI(可能为英文网页)部分。 |
问题 | 虽然我未看到 WM_TOUCH 消息,但我知道 Windows Touch 正在工作,因为我看到了 WM_GESTURE 消息。 |
---|---|
原因 | 缺少对 RegisterTouchWindow 的调用。 |
解决方法 | WM_TOUCH 和 WM_GESTURE 消息是互斥的。如果您未调用 RegisterTouchWindow,则您只会收到 WM_GESTURE 消息。 |
问题 | 我注意到,从我的手指按下到我从应用程序获取输入这一过程出现了少量延迟。 |
---|---|
原因 | 防手掌误触功能导致输入出现延迟。 |
解决方法 | 如果在对 RegisterTouchWindow 的调用中设置 TWF_WANTPALM,则将启用防手掌误触功能。这会导致软件测试输入是来自手指、触笔还是用户手掌,从而出现些许(100 毫秒)延迟。可通过调用 RegisterTouchWindow 并清除 TWF_WANTPALM 标志来禁用防手掌误触功能。 |
Windows Touch 笔势疑难解答
问题 | 我在处理 WM_GESTURE 消息之后,再也无法获取边界反馈。 或者,以前正常工作的笔势现在无法正常工作。 |
---|---|
原因 | 未处理 WM_GESTURE 消息就使用它。 |
解决方法 | 您可能使用 Windows Touch 消息而不将其转发给 DefWindowProc,这将导致发生意外行为。有关如何正确处理 WM_GESTURE 消息的更多信息,请参见 Windows 笔势入门。 |
问题 | 我未看到 WM_GESTURE 消息,但我知道 Windows Touch 正在工作,因为我看到了 WM_TOUCH 消息。 |
---|---|
原因 | 调用 RegisterTouchWindow。 |
解决方法 | WM_TOUCH 和 WM_GESTURE 消息是互斥的。如果调用 RegisterTouchWindow,则将不会收到 WM_GESTURE 消息。 |
问题 | 我未看到应显示的所有笔势。例如,我看到了标识符为 GID_PAN 的笔势,但没有看到标识符为 GID_ROTATE 的笔势。 |
---|---|
原因 | 默认情况下,不启用某些笔势(如旋转笔势)。 |
解决方法 | 您需要在接收 WM_GESTURENOTIFY 参考中所述的 WM_GESTURENOTIFY 消息时调用 SetGestureConfig,或者您需要为 WM_GESTURENOTIFY消息添加处理程序。以下代码说明如何实现一个处理程序以启用对旋转的支持。 有关典型笔势配置的更多示例,请参见 SetGestureConfig。 |
问题 | 当我执行平移笔势时,应用程序中的自定义滚动条未滚动。 |
---|---|
原因 | 缺少针对正确的 WM_*SCROLL 消息的处理程序。 |
解决方法 | 您未处理自定义滚动条中的所有 WM_*SCROLL 消息。建议您处理 WM_GESTURE 消息,而不是通过旧版支持来保留自定义滚动条功能。您需要支持消息,如对使用滚动条进行平移的旧版支持部分中所述。 |
问题 | 我遇到笔势延迟情况。 |
---|---|
原因 | 划动功能可能会导致笔势延迟。 |
解决方法 | 划动功能会导致应用程序接收 WM_GESTURE 消息所用的时间出现延迟。有关禁用划动功能的信息,请参见对使用滚动条进行平移的旧版支持。 |