65.9K
CodeProject 正在变化。 阅读更多。
Home

Windows 7 多点触控应用程序开发(第 II 部分)

2009年9月8日

CPOL

2分钟阅读

viewsIcon

24301

Windows 7 多点触控应用程序开发。

在我的上一篇博文中 Windows 7 多点触控应用程序开发(第一部分),我描述了如何在 Windows 7 中处理多点触控图像操作,这提供了一个关于多点触控开发的基础概念。该代码使用了多点触控操作作用于整个屏幕。如果屏幕上有多个图像,这将为所有图像触发事件。

image

在这篇文章中,我将向您展示如何为所有图像单独管理多点触控事件。请在此处查看一个这样的图像操作演示 这里

为此,我们需要为屏幕上的每个手指分配一个唯一的触控 ID。只要手指接触屏幕,与该手指关联的触控 ID 将保持相同。如果用户释放手指,系统将释放触控 ID,并在下次触摸时自动重新分配。那么,我们如何获取触控 ID?您可以从 StylusEventArgs 中获取它(即 args.StylusDevice.Id)。笔式设备将自动为每次触摸生成此 ID;您只需要将其分配给相应的指尖触摸即可。

首先,我们将创建一个用户控件,该控件将包含单个图像和其 RenderTransform 的 XAML 代码。这与我们在上一篇文章中在 Window 内部所做的事情相同,但在这里,它将在用户控件(Picture 类)内部。创建一个 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>

为了同时跟踪上述“Picture”用户控件的多点触控,您可以使用 Windows 7 培训工具包中的 PictureTracker 类。您可以从 Microsoft 网站 下载它。它看起来像这样

/// <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 类关联的所有活动触控 ID。因此,我们将使用一个 Dictionary。我们将再次使用 Windows 7 培训工具包中的 PictureTrackerManager 类。

private readonly Dictionary<int, PictureTracker> _pictureTrackerMap;

在您的 Window1.xaml.cs 中创建一个 PictureTrackerManager 类实例,并将笔式事件注册到 PictureTrackerManager 事件。因此,现在,当 Picture 上发生触摸时,PictureTrackerManager 将首先找到与相应实例关联的触控 ID,并引发事件以处理该 ID。

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

参考

© . All rights reserved.