本文首发自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中,我们要给我们的程序加上手势的支持是如此的简单方便。好了,本小节就到这里,在下一节中我们将讨论手势和动画。
本文介绍了Windows Mobile 6.5的手势API,包括五种手势:点击、双击、长按、滑动及平移,并展示了如何使用封装后的API实现手势支持。
1329

被折叠的 条评论
为什么被折叠?



