Ultrabook™ 设备和平板电脑 Windows* 触控开发者指南
本指南包含应用程序开发者在开发针对 Ultrabook™ 设备的应用程序时需要使用的 API 相关信息。
- 下载 Ultrabook™ 设备和平板电脑 Windows 触控开发者指南 - [PDF 935KB]
目录
- 摘要
- 引言
- 硬件要求
- Ultrabook 设备的运行环境
- 触控交互:指针、手势和操作
- Web 浏览器中的触控支持
- 识别触控能力
- 针对支持触控的 Ultrabook 设备的 UI 设计
- 开发触控应用程序的资源
- 摘要
- 关于作者
摘要
本指南包含应用程序开发者在开发针对 Ultrabook™ 设备的应用程序时需要使用的 API 相关信息。它涵盖了针对 Windows* 7、Windows* 8 桌面、Windows* Modern UI 以及在 Web 浏览器中运行的应用程序的开发信息。
本指南还提供了常见手势用户期望的描述,并提供了一些开发令人满意的触控界面的指南。
引言
现在有许多支持触控的 Ultrabook™ 设备可用,软件开发者希望创建专为触控输入设计的软件。一个应用程序要完全支持触控,必须满足三个标准:
- 最常用的控件至少为 40x40 像素,足够大以方便用指尖精确指示。
- 支持相关手势(平移、缩放、旋转、两指点按、按压和点按),且效果发生在接触点。
- 应用程序在平移、缩放和旋转时提供平滑、响应迅速的视觉反馈,以使其感觉高度交互。
无论开发者是编写新应用程序还是希望更新现有应用程序以包含触控支持,本指南都将帮助他们完成旅程。
有关编写支持触控的应用程序的更多信息,请参阅 MSDN 文章《触控交互设计》。
硬件要求
消费者有各种支持触控的设备可供选择。开发者在尝试开发在每个设备上感觉自然的应用程序时面临着挑战。通常,支持触控的应用程序应设计为在其任何目标设备上运行,同时充分利用每个设备的触控功能。Ultrabook 设备代表了触控能力的高端,应作为应用程序触控界面的设计点。
带触摸屏的 Ultrabook 设备自 2011 年开始上市
- 第二代 Intel® 酷睿™ 处理器家族(代号 Sandy Bridge)。这些系统随 Windows 7 一起发布,有些带有触摸屏。
- 第三代 Intel® 酷睿™ 处理器家族(代号 Ivy Bridge)。这些系统也首先随 Windows 7 发布,但现在正与 Windows 8 一起销售。我们将在 2013 年及以后看到更多具有触控功能的设备,特别是因为许多较新的设计都是变形本。
本开发者指南的其余部分假设目标平台是支持触控的 Ultrabook 系统。为该设备设计的软件可以适应运行相同操作系统的其他支持触控的设备。
Ultrabook 设备的运行环境
如今设计应用程序需要仔细考虑客户最常使用的环境以及应用程序最适合的环境。无论应用程序是针对 Windows 8 桌面还是作为 Windows 应用商店应用程序,开发者都需要了解哪些界面适用。
如果应用程序针对 Windows 8 UI(也称为 Windows 应用商店应用程序),则必须使用 WinRT API。如果应用程序要在 Windows 8 桌面环境中运行,则有更多选择:Windows 7 的旧版 API 和 Windows 8 的新触控 API。这些接口将在下面的部分中进一步讨论。还有其他开发 Web 应用程序的选项。Web 浏览器可用的触控界面也将在下面讨论。
触控交互:指针、手势和操作
触控输入有不同级别的解释。指针事件是最基本的,因为它们表示触控的单独接触点。手势和操作事件在此基础上构建。手势事件提供了一种捕获简单点按和按住手势的简单方法。操作事件用于使用物理手势模拟 UI 元素的物理操作的触控交互。当用户与屏幕上的 UI 元素交互时,操作事件提供更自然的体验。可用的触控界面对这三个解释级别有不同程度的支持。
阅读有关 MSDN 上的手势、操作和交互的更多信息
指针交互
指针事件是来自输入设备(例如鼠标、触控笔、单指或多指)的单个、唯一的输入或“接触”。当发生接触时,系统在首次检测到时创建一个指针,然后当指针离开检测范围或被取消时,它将被销毁。在多点触控输入的情况下,每个接触都是一个唯一的指针。表 1 显示了 Ultrabook 设备运行 Windows 7 和 Windows 8 时可用的用于检索基本指针事件的接口。
表 1. Ultrabook 设备可用的指针 API
操作系统兼容性 | 触控界面 | 备注 |
Windows* 7 (桌面) |
|
|
仅 Windows 8 (桌面) |
|
|
Windows Modern UI |
|
Windows 7 和 Windows 8 可用的触控界面
- WM_TOUCH (消息)
- WM_POINTER (消息)
- PointerPoint (类)
- RegisterTouchWindow (函数)
请参阅 MSDN 上的常见用户交互指南。
Windows 7 和 Windows 8 桌面触控界面:WM_TOUCH
WM_TOUCH 消息可用于指示一个或多个指针(例如手指或笔)已在屏幕上进行接触。
示例代码
- Intel Developer Zone: Windows 桌面触控 (此示例包括自定义手势识别。)
指导
- MSDN: 触控交互设计
- MSDN: Windows 7 触控输入编程指南
Windows 8 桌面触控界面:WM_POINTER
WM_POINTER 消息是 Direct Manipulation API 的一部分,专门用于 Windows 8 桌面。此接口可用于捕获单个触控指针以及手势和操作。WM_POINTER 消息将在操作和手势交互部分进一步讨论。
MSDN 上的参考资料: Direct Manipulation API
Windows Modern UI 触控界面:PointerPoint
PointerPoint
类是 Windows 运行时环境的一部分,仅兼容 Windows 应用商店应用程序。它为与单个鼠标、触控笔或触控接触相关的输入指针提供基本属性。MSDN 提供了示例代码,可以帮助开发者开始使用 PointerPoint
接口。
MSDN 上的示例代码: 输入:XAML 用户输入事件示例
操作和手势交互
手势事件用于处理静态手指交互,例如点按和按住。双击和右击是从这些基本手势派生出来的。
- 手势:在输入设备上或由输入设备执行的物理动作或运动,可以是单指或多指、触控笔或鼠标。
- 操作:对象对手势的即时、持续响应。例如,滑动手势会导致对象以某种方式移动。
- 交互:如何解释操作以及操作产生的命令或动作。例如,滑动和轻扫手势相似,但结果根据是否超过距离阈值而不同。
表 2. 用于操作交互的基本手势
手势 | 类型 | 描述 |
按住 |
静态手势 |
检测到单个接触且不移动。按住会导致显示详细信息或教学视觉效果,而无需提交操作。 |
点按 |
静态手势 |
一根手指触摸屏幕并立即抬起。 |
转动 |
操作手势 |
两根或更多手指触摸屏幕并沿顺时针或逆时针方向移动。 |
滑动 |
操作手势 |
一根或多根手指触摸屏幕并沿相同方向移动(也称为平移) |
轻扫 |
操作手势 |
一根或多根手指触摸屏幕并沿相同方向移动短距离。 |
捏合 |
操作手势 |
两根或更多手指触摸屏幕并相互靠近或远离移动。 |
拉伸 |
操作手势 |
两根或更多手指触摸屏幕并相互远离移动。 |
表 3. Ultrabook™ 设备可用的手势界面
操作系统兼容性 | 手势界面 | 备注 |
Windows 7 Windows 8 (桌面) |
|
|
Windows 7 Windows 8 (桌面) |
WM_GESTURE + GESTUREINFO 结构 |
|
Windows 8 (桌面) |
|
|
Windows Modern UI |
|
MSDN 上的参考资料
- WM_TOUCH + IManipulationProcessor
- WM_GESTURE + GESTUREINFO
- WM_POINTER + Direct Manipulation APIS
- PointerPoint + GestureRecognizer
表 4. 触控交互的标准预期交互和结果
交互 | 描述 |
按住以学习 |
显示详细信息或教学视觉效果。 |
点按以执行主要操作 |
调用主要操作,例如启动应用程序或执行命令。 |
滑动以平移 |
主要用于平移交互,但也可用于移动、绘图或书写。也可通过擦洗(在相关对象(如单选按钮)上滑动手指)来定位小而密集排列的元素。 |
轻扫以选择、命令和移动 |
将手指滑动短距离,垂直于平移方向,可在列表或网格中选择对象。 |
捏合和拉伸以缩放 |
不仅用于调整大小,此交互还可通过语义缩放跳到内容的开头、结尾或任何位置。SemanticZoom 控件会产生缩小的视图,用于显示项目组并快速返回它们。 |
转动以旋转 |
用两根或更多手指旋转会导致对象旋转。 |
从边缘轻扫以获取应用程序命令 |
从屏幕底部或顶部边缘轻扫会显示应用程序命令。 |
从边缘轻扫以获取系统命令 |
从屏幕右边缘轻扫会显示用于系统命令的“超级按钮”。从左边缘轻扫会导致循环切换当前运行的应用程序,从屏幕顶部边缘向底部滑动会关闭应用程序。从顶部边缘向下滑动并向左或向右边缘贴靠会将当前应用程序贴靠到屏幕该侧。 |
解释 Windows 7 桌面的操作和手势交互
IManipulationProcessor
接口可以与 WM_TOUCH API 结合使用,提供一种向 UI 对象添加平移、旋转、缩放和惯性的方法。此组合提供了类似于 WM_POINTER 手势识别功能的功能。一旦启用操作处理器,操作就会在触控手势启动后立即开始。
示例代码
- MSDN: 操作和惯性示例
WM_GESTURE 消息有一个名为 GESTUREINFO 的结构,可用于解释手势和操作。WM_GESTURE 的 MSDN 网页展示了如何使用 GESTUREINFO 结构获取手势特定信息的示例。
请注意,WM_GESTURE 存在限制,例如同时触控输入的最大数量仅为两个,并且不支持同时手势。对于需要更多功能但仍需要支持 Windows 7 桌面的应用程序,请使用 WM_TOUCH 接口,并编写自定义手势识别器(如下面的自定义手势识别部分所述),或将操作处理器接口与 WM_TOUCH 结合使用。
Intel Developer Zone 上的示例代码 (WM_GESTURE API + GESTUREINFO: 示例应用程序:桌面触控
有关编写支持触控的应用程序的更多信息,请参阅 MSDN 文章:触控交互设计。
处理 Windows 8 桌面应用程序的操作和手势交互
仅针对 Windows 8 桌面的应用程序可以使用 Direct Manipulation API (WM_POINTER 消息)。指针消息被传递给一个内部交互上下文对象,该对象在无需实现自定义手势识别器的情况下执行操作识别。存在一个回调基础设施,其中管理所有涉及跟踪联系人的交互。
Direct Manipulation 旨在处理操作和手势交互,并支持两种输入处理模型:
- 自动/独立:窗口消息由 Direct Manipulation 在委托线程上自动拦截并处理,无需运行应用程序代码,使其独立于应用程序。
- 手动/依赖:窗口消息由在 UI 线程中运行的窗口过程接收,然后该过程调用 Direct Manipulation 处理消息,使其依赖于应用程序。
可以通过初始化 Direct Manipulation 并准备系统进行输入处理来捕获手势。
请参阅 MSDN 上的快速入门:Direct Manipulation,了解在使用 Direct Manipulation 时执行典型任务所需的 API 调用概述。
处理 Windows 8 Modern UI 中的操作和手势交互
GestureRecognizer API 用于处理指针输入以处理操作和手势事件。PointerPoint
方法返回的每个对象都用于将指针数据提供给 GestureRecognizer
。手势识别器侦听并处理指针输入并处理静态手势事件。有关如何创建 GestureRecognizer
对象然后在该对象上启用操作手势事件的示例,请参阅 MSDN GestureRecognizer 网页(下文引用)。
MSDN 上的参考资料
- GestureRecognizer API
- PointerPoint 方法
Intel Developer Zone 上的示例代码: 示例应用程序:Windows* 应用商店触控。
自定义手势识别
在可能的情况下,请使用内置手势识别器(参见表 3)。如果提供的手势和操作接口不提供所需的功能,或者应用程序需要更快地消除点按和手势之间的歧义,则可能需要编写自定义手势识别软件。在这种情况下,客户期望的是涉及与应用程序中 UI 元素直接交互的直观体验。最好将自定义交互基于标准控件,以保持用户操作的一致性和可发现性。只有在有明确、定义明确的需求且基本交互不支持应用程序所需功能时,才应使用自定义交互。有关常见和预期交互以及触控交互后果的列表,请参见表 4。
Intel Developer Zone 上的代码示例(WM_TOUCH 与自定义手势识别):Windows 桌面触控
Web 浏览器中的触控支持
Web 浏览器中运行的应用程序也可以使用触控输入,支持程度因浏览器而异。由于 Web 浏览器功能变化迅速,通常最好检测支持的功能而不是特定的浏览器。一旦确定是 Internet Explorer (IE) 10、基于 Webkit* 构建的浏览器还是需要支持的其他浏览器,功能检测已被证明是一种更有效的技术。功能检测维护成本较低,原因如下:
- 新浏览器发布,现有浏览器经常更新。现有代码可能未考虑新浏览器版本。更新后的浏览器可能支持在浏览器检测代码设计时不支持的标准和功能。
- 新设备经常包含新版本的浏览器,因此必须不断审查浏览器检测代码以支持新浏览器。为每个浏览器创建自定义实现可能会变得极其复杂。
- 许多浏览器支持修改用户代理字符串,这使得浏览器检测难以准确识别。
WebKit 驱动 Apple Safari* 和 Google Chrome*,Opera 也将很快将其浏览器转移到使用 WebKit。Internet Explorer 10 不使用 WebKit;但是,WebKit 和 IE 10 都建立在文档对象模型 (DOM) 级别 3 核心规范之上。要查看与触控事件相关的标准,请参阅 2013 年 1 月发布的标准“触控事件版本 1”。
参考文献
- Webkit
- 文档对象模型 (DOM) 级别 3 核心规范
- 触控事件版本 1
- navigator 对象
- Navigator userAgent 属性
IE 10 有自己的触控接口,必须调用这些接口才能处理触控事件。使用带有 userAgent
属性的 navigator 对象来确定浏览器是否支持所需功能。以下示例表明浏览器是 Internet Explorer。
用法
<script type="text/JavaScript">
If (navigator.userAgent.indexOf(“MSIE”)>0)
{
// Run custom code for Internet Explorer.
}
</script>
使用 hasFeature
方法确定浏览器是否支持特定功能。例如,以下是如何确定浏览器是否支持触控事件(这也适用于 IE 10):
var touchSupported = document.implementation.hasFeature("touch-events","3.0");
其中“touch-events”是我们正在检查的功能,“3.0”是我们感兴趣的 DOM 规范级别。然后,应用程序可以监听以下触控事件:touchstart
、touchend
、touchmove
和 touchcancel
。
参考:hasFeature 方法
要使用基于 WebKit 的浏览器(Chrome、Safari 等)处理触控事件,只需设置以下三个事件以涵盖主要输入状态:
canvas.addEventListener( ‘touchstart’, onTouchStart, false );
canvas.addEventListener( ‘touchmove’, onTouchMove, false);
canvas.addEventListener( ‘touchend’, onTouchEnd, false);
对于 Internet Explorer,请改为参考 MSPointer
事件
canvas.addEventListener( ‘MSPointerDown’, onTouchStart, false );
canvas.addEventListener( ‘MSPointerMove’, onTouchMove, false);
canvas.addEventListener( ‘MSPointerUp’, onTouchEnd, false);
同样,还有手势事件监听器。它们是针对非 IE 10 浏览器的 gestureStart
、gestureChange
和 gestureEnd
。
下载 MSDN 上处理 DOM 指针事件的示例代码:输入 DOM 指针事件处理示例。
Internet Explorer 10 及其与 Windows 7 的兼容性
虽然 IE 10 不使用 WebKit,但它建立在 DOM 级别 3 事件、HTML5 和 Progress Event 标准之上。本节提供了有关 IE 10 以及它在 Windows 7 上如何交互的信息。
标准
- DOM 级别 3 事件
- HTML5
- Progress Event [这里不应该有“s”吗?]
Windows 7 上的 Internet Explorer 10 将触控和笔输入作为模拟鼠标输入处理以下文档对象模型 (DOM) 事件:
- MSPointerCancel
- MSPointerDown
- MSPointerMove
- MSPointerOver
- MSPointerUp
Windows 7 上的 IE 10 不会触发以下任何 DOM 手势事件:
- MSGestureChange
- MSGestureEnd
- MSGestureHold
- MSGestureStart
- MSGestureTap
- MSManipulationStateChanged
表 5. Internet Explorer* 10 的触控界面
接口 | Windows* 7 MSVS 2010 | Windows 8 MSVS 2012 (桌面) | Windows 8 Modern UI | 备注 |
否 |
是 |
是 |
|
|
是 |
是 |
是 |
|
有关为 IE 10 开发支持触控的 Web 应用程序的更多信息 (MSDN):Internet Explorer 10 开发者指南
MSDN 上的示例代码:输入:操作和手势 (JavaScript)
识别触控能力
无论应用程序是原生应用程序还是 Web 应用程序,开发者都希望添加对硬件触控能力的检查,以便应用程序可以适当地配置其 UI。使用以下方法测试触控能力。
Windows 7 和 Windows 8 桌面
针对 Windows 7 或 Windows 8 桌面的应用程序可以调用 GetSystemMetrics
并以 SM_DIGITIZER 作为参数。以下代码片段是可从 Intel Developer Zone 下载的触控示例的一部分:Windows 桌面触控
void SDKSample::DeviceCaps::Touch::TouchGetSettings_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
Button^ b = safe_cast<Button^>(sender);
if (b != nullptr)
{
TouchCapabilities^ pTouchCapabilities = ref new TouchCapabilities();
Platform::String^ Buffer;
Buffer = "There is " + (pTouchCapabilities->TouchPresent != 0 ? "a" : "no") + "
digitizer presentn";
Buffer += "The digitizer supports " + pTouchCapabilities->Contacts.ToString() + "
contactsn";
TouchOutputTextBlock->Text = Buffer;
}
}
Web 应用程序
对于 Internet Explorer,请使用如下所述的 msMaxTouchPoints
属性:
测试触控硬件能力
If (navigator.msMaxTouchPoints) {…}
测试多点触控硬件能力
If (navigator.msMaxTouchPoints >1) {…}
获取硬件支持的最大触控点数
Var touchPoints = navigator.msMaxTouchPoints;
对于 Chrome 和 Safari,请使用以下方法(与上面相同,但将 msMaxTouchPoints
替换为 maxTouchPoints
)
var result = navigator.maxTouchPoints;
从 Web 应用程序中通用地测试触控设备可能会有些棘手。虽然某些功能在某些浏览器上运行良好,但其他功能在没有触控时也指示存在触控,例如,如果浏览器本身支持触控,即使设备不支持触控,它也可能报告触控可用。
请注意,在 Windows 7 上运行的 IE 10(桌面)中,MaxTouchPoints 将返回 0。
参考文献
针对支持触控的 Ultrabook 设备的 UI 设计
为 Ultrabook 设备设计的应用程序可能需要处理点按、平移、缩放等手势。支持触控的应用程序很少处理原始指针数据,除了将其传递给手势检测。
新应用程序应以触控作为主要输入方式进行设计。鼠标和触控笔支持不需要额外的工作;但是,软件开发者在设计触控优化应用程序时应考虑其他几个因素。
表 6. 触控支持应用程序的注意事项
参考文献
// Check for Touch support
// Get the Touch Capabilities by calling GetSystemMetrics
BYTE digitizerStatus = (BYTE)GetSystemMetrics(SM_DIGITIZER);
// Hardware touch capability (0x80); readiness (0x40)
if ((digitizerStatus & (0x80 + 0x40)) != 0) //Stack Ready + MultiTouch
{
RegisterTouchWindow(m_pWindow->GetHWnd(), TWF_WANTPALM);
}
图 2. Windows* 7 识别触控能力的示例
请注意, BYTE nInputs = (BYTE)GetSystemMetrics(SM_MAXIMUMTOUCHES);
Windows 8 (Windows 应用商店应用程序)通过使用 参考文献
|
因素 | 触摸 | 鼠标/触控笔 |
精度 |
|
|
人体解剖学 |
|
|
对象状态 |
|
|
丰富的交互 |
|
|
软件开发者应在交互过程中提供适当的视觉反馈,以便用户能够识别、学习并适应应用程序和操作系统如何解释他们的交互。视觉反馈对用户很重要,可以让他们知道他们的交互是否成功,从而提高他们的控制感。这有助于减少错误并帮助用户理解系统和输入设备。
开发触控应用程序的资源
Intel Developer Zone 上的相关文章
- 比较触控编码技术 – Windows 8 桌面触控示例
- 探索 Windows* 8 应用程序的触控示例
- Windows* 8 应用商店触控代码示例
- Windows* 8 桌面触控代码示例
- 将 Win32 应用程序移植到 Windows 8 桌面
- 带触摸屏的实时战略游戏
MSDN 上的相关文章
- Windows 7 触控输入编程指南
- 架构概述 (Windows 7)
- 故障排除应用程序
- 在非托管代码中添加操作支持
- Windows 触控示例
- 在 Windows 8* 中构建高级触控应用程序 (视频)
- Windows 8 SDK
- 输入:触控命中测试示例
- 桌面应用程序开发文档 (Windows)
- Windows 触控手势概述 (Windows)
- Windows 触控消息入门 (Windows)
- Get PointerTouchInfo 函数 (Windows)
- (MSDN) Internet Explorer 10 开发者指南
总结
希望开发支持触控的应用程序的开发者,无论其应用程序将原生运行还是作为 Web 应用程序,都需要清楚地了解可用的 API。本指南涵盖了适用于以下环境的接口:Windows 7、Windows 8 桌面、Windows Modern UI 以及在 Web 浏览器中运行的应用程序。虽然 Windows 7 中可以实现手势和操作,但应用程序开发者可能会发现 Windows 8 API(针对桌面和/或 Modern UI 的那些)为自动手势识别提供了最佳选择。
编写支持触控的 Web 应用程序的开发者需要检查其代码是否兼容 IE 10,因为 IE 10 有其自己的接口,必须用于处理触控、手势和操作。其他基于 Webkit 的浏览器也基于 DOM 级别 3 标准,并支持触控和手势事件。
本指南还涵盖了常见手势和操作交互的描述,并提供了一些开发支持触控应用程序的指南。
本文由 Gael Hofemeier 撰写。Gael 是 Intel 公司的一名布道师应用工程师。她的重点是提供为 Intel® 架构编写软件的开发者所需的技术内容。除了撰写内容,她还主持 Intel Developer Zone 上的 Business Client 论坛。
Intel、Intel 标识、Ultrabook 和 Core 是英特尔公司在美国和/或其他国家的商标。
版权所有 © 2013 英特尔公司。保留所有权利。
*其他名称和品牌可能被声明为他人的财产。
- 下载 ultrabook-touch-developer-guide.pdf - 935.56 KB