Windows Mobile 6.5 Gesture API 介绍 --- (3) 使用Managed Gesture API

来源:互联网 发布:西裤长度 知乎 编辑:程序博客网 时间:2024/05/17 08:22

本文首发自MobileSide.cn,原文地址:http://mobileside.cn/post/2010/01/07/GestureAPI3.aspx

-----------------------------------------------------------------------------------------------------------------

    在本系列的第一节《Windows Mobile 6.5 Gesture API 介绍 --- (1) 概述》中,我们提到了微软针对Windows Mobile的Gesture提供了5种不同的手势。他们分别是Tap, Double Tap, Hold, Flick, Pan。如果您使用C++来开发Windows Mobile 6.5上的应用程序,那么请参考MSDN上关于Windows Mobile上Gesture的参考文档 http://msdn.microsoft.com/en-us/library/ee220917.aspx。 如果您是使用托管代码,那么您可以使用由微软的两位工程师(Alex Yakhnin, Ron Buckton)所封装的针对托管代码的API(http://code.msdn.microsoft.com/gestureswm)。

    在这套API中,分别针对这5种手势做了封装,不过名字略有改动:Tap改为Select; Double Tap改为DoubleSelect; Flick改为Scroll。 Hold和Pan没有改变。这套API的用法很简单,实例化一个他们封装好的手势识别器组件,然后给它指定要监控的对象。最后,加上针对这5种手势的事件处理函数即可。如下代码所示:

        private void InitGestureRecognizer()
        {
            gestureRecognizer1 = new GestureRecognizer(this.panel1);
            //You can also set the TargetControl property
            //gestureRecognizer1.TargetControl = this.panel1;

            gestureRecognizer1.Hold += new EventHandler<GestureEventArgs>(gestureRecognizer1_Hold);
            gestureRecognizer1.Select += new EventHandler<GestureEventArgs>(gestureRecognizer1_Select);
            gestureRecognizer1.DoubleSelect += new EventHandler<GestureEventArgs>(gestureRecognizer1_DoubleSelect);
            gestureRecognizer1.Pan += new EventHandler<GestureEventArgs>(gestureRecognizer1_Pan);
            gestureRecognizer1.Scroll += new EventHandler<GestureScrollEventArgs>(gestureRecognizer1_Scroll);
           
        }

        void gestureRecognizer1_Scroll(object sender, GestureScrollEventArgs e)
        {
            label1.Text = e.Kind.ToString() + ": " + e.State + ", (" + e.X + ", " + e.Y + "), d=" + e.ScrollDirection + ", a=" + e.Angle + ", v=" + e.Velocity;
        }

        void gestureRecognizer1_Pan(object sender, GestureEventArgs e)
        {
            label1.Text = e.Kind.ToString() + ": " + e.State + ", (" + e.X + ", " + e.Y + ")";
        }

        void gestureRecognizer1_DoubleSelect(object sender, GestureEventArgs e)
        {
            label1.Text = e.Kind.ToString() + ": " + e.State + ", (" + e.X + ", " + e.Y + ")";
        }

        void gestureRecognizer1_Select(object sender, GestureEventArgs e)
        {
            label1.Text = e.Kind.ToString() + ": " + e.State + ", (" + e.X + ", " + e.Y + ")";
        }

        void gestureRecognizer1_Hold(object sender, GestureEventArgs e)
        {
            label1.Text = e.Kind.ToString() + ": " + e.State + ", (" + e.X + ", " + e.Y + ")";
        }

    该示例代码是在窗体上放了两个控件: Panel1用来捕获手势事件;label1用来显示当前手势的一些参数。 运行状况如下图所示:

 

    最后一部分,是demo程序的源代码:GestureDemo2.zip (58.05 kb)

    看到了吧,在Windows Mobile 6.5中,我们要给我们的程序加上手势的支持是如此的简单方便。好了,本小节就到这里,在下一节中我们将讨论手势和动画。