title author date CreateTime categories
浅谈 Windows 桌面端触摸架构演进
lindexi
2019-11-12 14:37:31 +0800
2019-11-12 08:41:21 +0800

我在和小伙伴水触摸相关的坑,说到了上古的触摸,很难和小伙伴统一知识,于是就写了本文用于告诉大家,桌面端的触摸架构是如何一步步演进的

所有触摸架构都建立在系统之上,和系统版本相关。所以可以通过系统划分。虽然说是触摸架构,但是我能知道的也就是应用层面的接口和编程方法,如果是小伙伴被标题吸引过来的,想看触摸架构,那么请左转官方的 文档

在 XP 之前的系统,在开发行业,触摸屏只有少数游戏才能使用,此时触摸屏不是标准设备,各个应用需要通过端口访问硬件设备。也就是软件没有通过系统,直接和硬件通讯做到触摸。因为没有约定好触摸屏标准,可能有些触摸屏用的是PIN输入,有些用蓝牙输入,在上古的开发者都是非常厉害的,所以实现起来十分诡异。在这里是无法说明架构的,每个公司都可以使用自己的方式开发。请看 Windows for Pen Computing

在 XP 的时候,此时触摸屏成为 HID 设备,也就是有了标准。可以在系统上支持触摸屏,我记得在缺少补丁和驱动将会只支持单点触摸,如果需要支持多点触摸,需要额外的补丁或驱动。这部分我没有去查文档,如有错误,请告诉我。在 XP 的触摸存在很多坑,如果要在 XP 上开发支持多点触摸的应用,需要用一些有趣的技术,如TUIO等。此时的触摸屏还是作为 Mouse 用,此时我将这一代的触摸架构称为上古的触摸

在 Vista 和 Win7 才算支持多点触摸,此时的应用默认可以收到了 Gestures 消息,如果注册了 RegisterTouchWindow 的窗口将会接收到 Touch 消息,此时通过 Touch 消息就能做到多指触摸,请看 Detecting and Tracking Multiple Touch Points

在 Win7 的触摸是通过硬件设备作为 HID 设备,通过 HAL 层收集到信息,通过系统驱动进行转发消息。此时的硬件将不是直接连接到软件,中间会经过很多层,此时系统将会处理很多触摸的细节,开发的难度降低。但是这也存在一个坑就是系统的稳定性,如果系统没有正确处理触摸消息和触摸消息的转发,那么将会让应用或系统触摸失效

但是微软发现在书写时,如果走 Touch 消息,此时因为需要经过 Windows 消息,速度没有之前从硬件获取的快,于是提出了 Windows Inking Service Platform 请看 WPF 触摸到事件

在 Win7 的这个触摸架构就是古代的触摸

很多开发者都会反馈在 Win7 开发的触摸失效问题,如 WPF 客户端开发需要知道的触摸失效问题 和需要区分 Touch 和 Stylus 和鼠标事件,这样的开发成本比较高

在 Windows 8 提出了现代的触摸方法,通过 Pointer 表示,无论是鼠标还是触摸还是笔都是使用相同的 Pointer 消息,这个触摸架构将会对触摸有很好的支持。默认在 UWP 应用使用这个触摸架构,而 WPF 程序可以通过 这个方法 开启,对于 win32 应用需要使用 EnableMouseInPointer 方法在进程内开启

在上古的系统,因为触摸屏没有大量使用,也没有标准,只能各个应用读写硬件设备自己做触摸。在 XP 的时候,开始引入触摸屏 HID 设备标准(不确定win98又没引入,毕竟我不是学历史的) 此时触摸刚起步,存在很多不合理的设计,多点触摸还没有完善,需要依赖额外的驱动和补丁。在 Win7 将触摸作为 Windows 消息,支持了多点的触摸,同时兼容 XP 和上古的和硬件设备读写的软件,但是 Win7 系统消息的转发受补丁和驱动的影响,也会存在一些触摸失效,同时因为 Touch 消息和鼠标消息分开,降低了开发效率。在 Win8 提出了 Pointer 消息,可以将触摸等合并为相同的消息

本文主要的是下面文档,更多细节请看文档

Introduction to WPF 4 Multitouch – Jaime Rodriguez

c# - WPF supports touch or multi-touch screen? - Stack Overflow

MultiTouch driver for Windows XP Tablet PC Edition 2005 - ThinkPad X60 Tablet, X61 Tablet, X200 Tablet - PL

Getting Started with Windows Touch Messages

Getting Started with Windows Touch Gestures

TranslateZoomRotateBehavior

Pointer Input Messages and Notifications

win10 支持默认把触摸提升 Pointer 消息

WPF 触摸到事件

WPF 客户端开发需要知道的触摸失效问题

最新文章

  1. C语言 · 4-3水仙花数
  2. Nginx 正向代理
  3. WinForm中实现播放mp3 、mp4文件
  4. WAMP数据库环境搭建
  5. iOS序列化与反序列化
  6. android - 调试
  7. MEF初体验之十:部件重组
  8. Service 中添加同步块防止并发 重复
  9. 做了一个web版的 MyBatis Generator
  10. 关于vue页面多了之后,webpack热更新速度慢的解决办法
  11. AI外包 人工智能外包 长年承接人工智能项目 北京动点软件
  12. [Kafka] [All about it]
  13. 快速制作gif动图
  14. CodeChef - BLACKCOM 可行性dp转最优化树dp
  15. SpringMVC——SpringMVC 的入门案例
  16. vue 项目安装sass的依赖包
  17. Advising controllers with the @ControllerAdvice annotation
  18. 【杂谈】Java I/O的底层实现
  19. Guava的SetMultimap
  20. Assert.IsNotNull 方法(判断对象不为NULL)

热门文章

  1. 移动端图片轮播效果:depth模式总结
  2. CF16E Fish(状压+期望dp)
  3. Mysql 触发器写法
  4. [JZOJ 5817] 抄代码
  5. AdaBoost笔记之通俗易懂原理介绍
  6. markdown开篇
  7. arr = map(float,arr)输出问题
  8. <爬虫实战>糗事百科
  9. 21-Ubuntu-文件和目录命令-复制文件和目录-cp
  10. 今天真的很SB