本系列将介绍Multi-Touch(MT)多点触控技术的相关内容,使开发人员了解如何在Windows 平台中开发出具有MT 功能的应用程序。众所周知Windows 7 操作系统自身已经支持具有MT 功能的硬件设备, 画板程序(Paint)就是一个很好的例子,如果你的显示设备具有MT 功能,便可以用两个手指同时在画板中绘制不同的图案。

     

作为开发者对MT 应用程序进行测试的时候,当然需要MT 硬件设备的支持,否则我们无法判断程序是否能够正常运行。虽然现在市面上的MT 设备已经很多,但价格也都不菲。如果没有多点触控设备能否进行MT 程序的开发与测试呢?  答案当然是可以的,下文将介绍如何通过多鼠标模拟多点触控功能。

下载Multi-Touch Vista

首先需要从CodePlex 下载Multi-Touch Vista,通过它可以模拟多点触控。Multi-Touch Vista 其实有很多功能,但本篇我们只将它作为多点触控模拟器使用。下面是引自Multi-Touch Vista 的项目描述:

Multi-Touch Vista is a user input management layer that handles input from various devices (touchlib, multiple mice, TUIO etc.) and normalises it against the scale and rotation of the target window. Now with multitouch driver for Windows 7.

安装驱动

将压缩包解压,进入Driver 目录,依操作系统选择32或64位,运行Install driver.cmd(也可以在CMD 运行该程序)。

系统会弹出以下提示,选择"Install this driver software anyway"继续安装。

设备管理

驱动安装完毕后,进入设备管理器,选择"Human Interface Devices",右键"Universal Software HID device",将其禁用(Disable)。

选择"Yes",确定。

重新右键"Universal Software HID device",将其再次启用(Enable)。

触屏设置

在“开始”菜单输入"pen and touch",运行应用程序,如果上一步"Universal Software HID device"没有启动则无法运行该程序。

点击"Touch"标签,勾选下方"Touch pointer"选项,点击确定。

运行模拟器

首先为计算机再连接一个USB鼠标,用于模拟多点触控操作。回到解压目录,运行Multitouch.Service.Console.exe

服务启动后,便可以看到下图所示的两个红点,分别代表两个鼠标输入设备。

接下来运行Multitouch.Driver.Console.exe

最后运行Multitouch.Configuration.WPF.exe

点击"Configure device"按键,勾选"Block native windows mouse input … …",点击"OK"。

此后,Windows 鼠标就不再起作用了,取而代之的是屏幕上的那两个红点。

打开画板(Paint),此时可以用两个鼠标同时绘制各自的曲线。

至此,我们在没有MT 设备的条件下,通过模拟器实现了全部多点触控功能,就连Windows 7 也认为当前显示器具备多点触屏功能。通过该模拟器就可以正常测试MT 应用程序了,下一篇将开始介绍如何在WPF 开发多点触控应用程序。

作者:李敬然(Gnie)
出处:{GnieTech} (http://www.cnblogs.com/gnielee/

WPF Multi-Touch 开发:基础触屏操作(Raw Touch)

多点触控(Multi-Touch)就是通过与触屏设备的接触达到人与应用程序交互的操作过程。例如,生活中经常使用的触屏手机、触屏笔记本、显示器以及微软最新的Surface 产品等这些都属于触屏操作设备。本篇将介绍如何开发能够支持MT 功能的应用程序。

在WPF 4 中已经具备的多点触控开发技术,当多个手指触碰到触屏设备时,WPF 会把每跟手指认为是一个触控设备,并为其分配唯一的识别ID,以便跟踪不同手指的操作手势。下面将通过实例演示WPF 所支持的低级别触控操作:触碰(TouchDown)、分离(TouchUp)、移动(TouchMove),它们都是一些最基础的操作模式。

创建项目

新建项目在XAML中写入如下代码,<Grid>中只添加了<Canvas> 控件,其中包含TouchDown、TouchUp、TouchMove 三个基础触控事件。当手指触碰程序时便会在Canvas 中生成彩色圆圈,圆圈的位置随手指的移动而改变,手指离开触屏的同时圆圈消失。接下来将逐一讲解每个事件所完成的任务。

<Window x:Class="WpfRawTouch.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        Title="MainWindow" Height="350" Width="525">    <Grid>        <Canvas x:Name="touchPad" Background="Gray"                TouchDown="touchPad_TouchDown" TouchUp="touchPad_TouchUp"                 TouchMove="touchPad_TouchMove">        </Canvas>    </Grid></Window>

TouchDown 事件主要是完成当触碰产生时在<Canvas> 控件中生成彩色圆圈的任务(C#代码如下)。使用Ellipse 创建随机颜色的圆圈,通过GetTouchPoint 方法获取触碰位置点,并调整圆圈在<Canvas> 中的位置。为了跟踪手指移动轨迹,需要将触屏设备ID 及UI 控件存储在集合movingEllipses 中。

private Dictionary<int, Ellipse> movingEllipses = new Dictionary<int, Ellipse>();Random rd = new Random();private void touchPad_TouchDown(object sender, TouchEventArgs e){    Ellipse ellipse = new Ellipse();    ellipse.Width = 30;    ellipse.Height = 30;    ellipse.Stroke = Brushes.White;    ellipse.Fill = new SolidColorBrush(        Color.FromRgb(            (byte)rd.Next(0, 255),            (byte)rd.Next(0, 255),            (byte)rd.Next(0, 255))            );    TouchPoint touchPoint = e.GetTouchPoint(touchPad);    Canvas.SetTop(ellipse, touchPoint.Bounds.Top);    Canvas.SetLeft(ellipse, touchPoint.Bounds.Left);    movingEllipses[e.TouchDevice.Id] = ellipse;    touchPad.Children.Add(ellipse);}

当手指离开触屏时TouchUp 事件将被触发,首先将触碰设备从movingEllipses 集合中删除不再跟踪手指相关操作,并从<Canvas> 中将彩色圆圈移除。

private void touchPad_TouchUp(object sender, TouchEventArgs e){    movingEllipses.Remove(e.TouchDevice.Id);    Ellipse ellipse = movingEllipses[e.TouchDevice.Id];    touchPad.Children.Remove(ellipse);}

当手指在触屏上持续移动时TouchMove 事件触发,它来跟踪手指移动轨迹,并重新调整圆圈在<Canvas> 中的位置。

private void touchPad_TouchMove(object sender, TouchEventArgs e){    Ellipse ellipse = movingEllipses[e.TouchDevice.Id];    TouchPoint touchPoint = e.GetTouchPoint(touchPad);    Canvas.SetTop(ellipse, touchPoint.Bounds.Top);    Canvas.SetLeft(ellipse, touchPoint.Bounds.Left);}

程序演示

至此,一个简单的触控应用程序就完成了编译并运行该程序,用手指触碰屏幕并持续移动看看是否会出现下面视频中的情况(如果没有多点触屏设备请参考这里解决)。

< width="480" height="400" src="http://player.youku.com/player.php/sid/XMTk4MTY0NjI4/v.swf">

源码下载

WpfRawTouch.zip

作者:李敬然(Gnie)
出处:{GnieTech} (http://www.cnblogs.com/gnielee/

[]

WPF环境下多点触屏开发的一些经验(转)的更多相关文章

  1. MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件

    原文  MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件 UI 前沿技术 WPF 中的多点触控操作事件 Charles Petzold 下载代码示例 就在过去几年,多点触控还只是科幻电 ...

  2. 水晶报表在vs2010 WPF环境下的尝试

    原文:水晶报表在vs2010 WPF环境下的尝试 由于VS2010没有集成水晶报表组件,尝试前必须先安装 水晶报表 for VS2010,若机器未安装的可点击这里>>>下载安装 新建 ...

  3. 搭建windows环境下(nginx+mysql+php)开发环境

    搭建windows环境下(nginx+mysql+php)开发环境   1. 所需准备应用程序包        1.1 nginx 程序包nginx-1.0.4.zip或其他版本(下载地址: http ...

  4. zTouch-移动端触屏开发利器(zepto touch扩展)

    * Zepto.js v1.0.1 touch extend (Zepto.js v1.0.1 的swipe touch扩展)js-处理手机移动端web触屏手势动作. Zepto.js v1.0.1版 ...

  5. 基于appium的模拟单点或多点触屏操作

    一.单点触控 TouchAction类:将一系列的动作放在一个链条中,然后将该链条传递给服务器,服务器接受该链条后,解析各个动作,逐个执行,TouchAction类提供了以下几种方法: 短按:pres ...

  6. Windows 环境下vue+webpack前端开发环境搭建

    一.开发环境搭建 1.前端框架一般依赖node.js,我们首先要安装node.js. 2.由于许多npm 的源都在国外的地址,安装起来特别慢,所以我们这里利用淘宝的镜像服务器. 安装命令为:npm i ...

  7. Window环境下搭建Vue.js开发环境

    原文链接:http://blog.csdn.net/solo95/article/details/72084907 笔者最近在进行前端的学习,在点完了HTML5.CSS3.JavaScript等技能树 ...

  8. Ubuntu环境下eclipse的hadoop开发

    在安装好hadoop伪分布式后,开始搭建eclipse的hadoop开发环境 我的版本信息如下: Ubuntu 版本 12.10 Hadoop版本 1.2.1 Java版本  1.6.0_31(命令j ...

  9. 基于HBase Hadoop 分布式集群环境下的MapReduce程序开发

    HBase分布式集群环境搭建成功后,连续4.5天实验客户端Map/Reduce程序开发,这方面的代码网上多得是,写个测试代码非常容易,可是真正运行起来可说是历经挫折.下面就是我最终调通并让程序在集群上 ...

随机推荐

  1. 关于java序列化中的一个细节

    java序列化机制的可以参考很多资料了,最近在看的时候发现了一些问题. 1. 默认的序列化机制,很多书里讲到序列化类只序列化类名,实例变量,不会实例化类变量(static)和瞬态变量(transien ...

  2. JDBC的一些基础提交语句回顾

    增删改:excuteUpdate();返回int 查:excuteQuery();返回ResultSet

  3. centos7安装redis

    方法一:使用命令安装(前提是已经安装了EPEL). 安装redis: yum -y install redis 启动/停止/重启 Redis 启动服务: 1 systemctl start redis ...

  4. 日常积累之JSON.stringify和JSON.parse substr

    1.substr(start,len) 从字符串中读取内容,第一个参数是读取的首位置,如果为负数,则从末尾倒数计数. 第二个参数是要读取的长度. eg: var str = "silence ...

  5. javascript中this指针

    看完此片文章豁然开朗,非常感谢.javascript技术难点(三)之this.new.apply和call详解 下面说一说自己的理解: this指针总是指向调用他的对象,其实我更愿意理解为:this指 ...

  6. yii2-basic后台管理功能开发之三:自定义GridView列显示

    在第二篇 yii2-basic后台管理功能开发之二:创建CRUD增删改查 中,我们利用gii工具生成的结果一般并不是我们想要的结果. 我们需要根据自己的需求自定义列显示.我遇到的主要是一下变更: 时间 ...

  7. 项目部署到tomcat Root中后导致 WebApplicationContext 初始化两次的解决方法

    上一篇文章刚说项目部署到tomcat的ROOT中,今天就发现一个问题.通过eclipse启动tomcat时候,WebApplicationContext 初始化两次: 现象:   通过eclipse控 ...

  8. Java注释@interface的用法【转】

    Java用  @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类.@Override,@Deprecated,@SuppressWarnings为 ...

  9. VMware中linux配置1-安装VMware tool 共享文件夹

    linux:ubuntu 14 安装Linux,使用的ubuntu-14.04.1-desktop-amd64.iso 安装的,这个就不写了. 为了在linux中访问windows的目录,需要安装VM ...

  10. Oracle一个事务中的Insert和Update执行顺序

    今天碰到了一个奇怪的问题,是关于Oracle一个事务中的Insert和Update语句的执行顺序的问题. 首先详细说明下整个过程: 有三张表:A,B,C,Java代码中有一段代码是先在表A中插入一条数 ...