原文:2019-11-29-浅谈-Windows-桌面端触摸架构演进

title author date CreateTime categories
浅谈 Windows 桌面端触摸架构演进
lindexi
2019-11-29 10:20:37 +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 客户端开发需要知道的触摸失效问题

2019-11-29-浅谈-Windows-桌面端触摸架构演进的更多相关文章

  1. 2019-11-12-浅谈-Windows-桌面端触摸架构演进

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

  2. 浅谈Windows环境下DOS及MS-DOS以及常见一些命令的介绍

    浅谈Windows环境下DOS及MS-DOS以及常见一些命令的介绍 前记 自己是搞编程的,首先我是一个菜鸟,接触计算机这么久了,感觉很多计算机方面的技术和知识朦朦胧胧.模模糊糊,貌似有些贻笑大方了:所 ...

  3. Flutter Windows 桌面端支持进入稳定版

    Flutter 创建伊始,我们就致力于打造一个能够构建精美的.可高度定制的.并且可以编译为机器码的跨平台应用解决方案,以充分发挥设备底层硬件的全部图形渲染能力.今天,Flutter 对 Windows ...

  4. 浅谈Windows API编程

    WinSDK是编程中的传统难点,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制…… WinSDK是编程 ...

  5. 浅谈iOS中MVVM的架构设计与团队协作

    说到架构设计和团队协作,这个对App的开发还是比较重要的.即使作为一个专业的搬砖者,前提是你这砖搬完放在哪?不只是Code有框架,其他的东西都是有框架的,比如桥梁等等神马的~在这儿就不往外扯了.一个好 ...

  6. IOS中 浅谈iOS中MVVM的架构设计与团队协作

    今天写这篇文章是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇文章的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  7. 浅谈iOS中MVVM的架构设计与团队协作【转载】

    今天写这篇文章是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇文章的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  8. 2019.11.29 SAP SMTP郵件服務器配置 發送端 QQ郵箱

    今天群裏的小夥伴問了如何配置郵件的問題,隨自己在sap裏面配置了一個 1.    RZ10配置參數 a)       参数配置前,先导入激活版本 执行完毕后返回 b)      输入参数文件DEFAU ...

  9. 浅谈Windows下SVN在Android Studio中的配置、基本使用及解除关联

    看到网上很多关于svn环境配置和关联Android-Studio的很多博文,发现很零散,想集大家所长整理一下: 在AndroidStudio中开发版本控制中,除了Git就是SVN,和Eclipse不同 ...

随机推荐

  1. Gson+GsonFormat+Postman简单粗暴解析json

    现在有时候之前的项目需要返回来修改bug看到以下这段代码 if (test != null) { JSONTokener jsonParser = new JSONTokener(test); JSO ...

  2. mssql 收缩日志

    --设置简单模式 USE[master] GO ALTER DATABASE mindeemes_spy SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATAB ...

  3. Jenkins 打tag回滚

    利用jenkins,从gitlab上拉取代码,然后发布,如果想进行代码回退,其实还是代码发布,拉取的时候,选择合适的标签. 一.利用Git parameter插件选择branch或tag.下面的文本参 ...

  4. day08 作业

    1. 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中 即: {'k1' ...

  5. [PHP] 使用ftell和fseek函数直接定位文件位置获取部分数据

    对于大文件只获取部分数据很有用 1.使用ftell函数可以获取当前指针的字节位置2.使用fseek函数可以直接定位到指定的位置3.读取指定字节的数据就可以部分获取文件内容了 <?php clas ...

  6. mysql5.6运行一段时间之后网站页面出现乱码解决办法

    mysql5.6运行一段时间之后网站页面出现乱码,怎么都打不开,经过排查之后,知道是数据库默认字符集出问题了,在此分享给大家经验. 在mysql5.6配置文件:my.ini 找到: 添加如下内容: [ ...

  7. 重新学习SpringMVC——基础

    2. SpringMVC_HelloWorld3. SpringMVC_RequestMapping_修饰类4. SpringMVC_RequestMapping_请求方式5. SpringMVC_R ...

  8. 如何做到MySQL高扩展性?

    高并发及其关注要点 近年来,随着互联网.移动互联网的飞速发展,业务系统的互动性日益增强,用户规模不断攀升,电商.游戏.直播.在线教育.短视频等一系列新兴移动端应用如雨后春笋般涌现出来,这些应用 “高并 ...

  9. maven settings

    maven settings 私有服settigs <?xml version="1.0" encoding="UTF-8"?> <setti ...

  10. Django项目中出现的错误及解决办法(ValueError: Dependency on app with no migrations: customuser)

    写项目的时候遇到了类似的问题,其实就是没有生成迁移文件,执行一下数据库迁移命令就好了 ValueError: Dependency on app with no migrations: customu ...