技术开发 频道

Windows7与iphone多点触摸应用谁更行?

  【IT168专稿Touch-ID概述

  我们必须为屏幕上的每个手指分配一个唯一的Touch-id,只要手指触摸屏幕,相关的Touch-id将会为特定的手指保留下来,如果用户释放了他的手指,系统将会释放对应的Touch-id,下次触摸屏幕时会自动再分配一个Touch-id。那么如何得到Touch-id呢?可以从StylusEventArgs得到(如args.StylusDevice.Id),手写设备将会自动为每次触摸生成这个ID,你唯一要做的事情就是将它分配给每个手指触摸。

  XAML实现

  首先,我们要创建一个UserControl,它将由一个Image和RenderTransform功能需要的XAML代码组成,在上一篇文章中我们让图像显示在窗口(Window)中,这里我们要让图像显示在UserControl(UserControl类)中。创建一个依赖属性(DependencyProperty),动态指定图像位置(ImageLocation)。

<UserControl x:Class="Windows7MultitouchDemo.Picture"
   xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml">
  
<Image Source="{Binding Path=ImageLocation}" Stretch="Fill" Width="Auto"
          Height
="Auto"  RenderTransformOrigin="0.5, 0.5">
      
<Image.RenderTransform>
          
<TransformGroup>
                
<RotateTransform x:Name="trRotate"/>
                
<ScaleTransform x:Name="trScale"/>
                
<TranslateTransform x:Name="trTranslate"/>
            
</TransformGroup>
        
</Image.RenderTransform>
    
</Image>
</UserControl>
 

  代码实现

  为了同时跟踪上面UserControl中“Picture”的多点触摸,你可以使用Window 7培训工具包中的PictureTracker类,从http://www.microsoft.com/downloads/details.aspx?FamilyID=12100526-ed26-476b-8e20-69662b8546c1&displaylang=en这里下载,它看起来是下面这个样子:

/// <summary>
/// Track a single picture
///
</summary>
public class PictureTracker
{
       private Point _prevLocation;
       public Picture Picture { get; set; }
       public void ProcessDown(Point location)
       {
           _prevLocation = location;
       }
       public void ProcessMove(Point location)
       {
           Picture.X += location.X - _prevLocation.X;
           Picture.Y += location.Y - _prevLocation.Y;
           _prevLocation = location;
       }
       public void ProcessUp(Point location)
       {
           //Do Nothing, We might have another touch-id that is
           //still down
       }
}

 

    现在我们存储了所有与PictureTracker类相关的活动touch-id,因此我们将使用一个字典,这里我们要使用了一个来自Window 7培训包中的PictureTrackerManager类。

private readonly Dictionary<int, PictureTracker> _pictureTrackerMap;

  在你的Window1.xaml.cs中创建一个PictureTrackerManager类的实例,使用PictureTrackerManager事件注册指示笔(触摸)事件,现在起,无论何时触摸屏幕上的图片,PictureTrackerManager将会先为各个实例找到相关的touch-id,然后根据手指操作触发不同的事件,如手指按下,移动,释放等。

//Register for stylus (touch) events
StylusDown += _pictureTrackerManager.ProcessDown;
StylusUp += _pictureTrackerManager.ProcessUp;
StylusMove += _pictureTrackerManager.ProcessMove;

 

    小结

  本文所介绍的仅仅是一个最简单的代码实现,你完全可以根据你的业务需要进行修改。

         原文出处:http://www.dotnetspark.com/kb/1667-windows-7-multitouch-application-development.aspx

        链接系列文章  

0
相关文章