Symbian S60从第五版开始支持触摸屏。从SDK中可知,触摸事件是由控件接受处理,开发者需要继承CCoeControl:HandlePointerEventL()来处理触摸事件。一个简单使用此函数的例子如下(注意在MMP文件中需加入"LIBRARY cone.lib"):
有了这个函数,我们按照自己的想法来设计很多事件,比如触摸动作(触摸手势),关于这个的详细讨论可以看Nokia Wiki。
下面介绍一个基于这个函数实现的拖拽效果。
首先,要使得程序能够接收到EDrag事件,需要在CSampleContainer(继承自CCoeControl)的构造函数中调用EnableDragEvents()。
其次,弄清楚S60 5th对EButton1Down, EButton1Up, EDrag 的响应方式。当我们在手机屏幕上拖拽时,首先,当触摸笔或手指按到屏幕上,EButton1Down事件会被响应,然后在拖拽过程中会周期性的响应EDrag事件,这个周期可以不用考虑(需要详细了解的可以查看SDK中SetMinInterDragInterval() 函数)。在离开屏幕时又会相应EButton1Up事件。据此响应事件,可以实现拖拽的效果。
下面是一个对超过屏幕显示高度的长文本显示实现上下拖拽的简单示例:
iYbase是偏移量,也就是首行文字的纵坐标。Draw()函数根据这个坐标在屏幕上绘制文本。iDeltaY记录上一次EDrag响应时触摸笔坐标与初始触摸笔坐标的纵向差,以此计算新的iYbase。
现在,屏幕上的文字就随着你的手指上下移动了。当然稍加修改即可实现任意方向的拖拽。
这篇文章写的比较简单,修改后的文章在这里,应该比较详细了,并且加上了一个示例。示例代码下载地址:http://yctx.me/file/DragExample.zip