WM6.5 SDK新增了对手势的支持API,作为触摸屏的一种特殊的操作方式,用来代替滚动条的功能,且会带来比滚动条更好的体验。这种手势操作是一种物理特征的操作,flash中有很多这种物理特征的操作算法,比如重力特征,浮力特征,柔性特征。对此在按装WM6.5新增SDK时,会有sample。
头文件
gesture.h:手势动作相关属性的定义
GesturePhysicsEngine.h:手势动作主结构体,主操作函数
WindowAutoGesture.h:手势动作配置结构体,配置函数
对于手势操作,首先要求响应WM_GESTURE消息,这个消息是手势动作触发的,消息参数的wParam是在gesture.h中定义的动作ID,表示手势在哪个阶段:
GID_PAN:平拖,表示触笔点压屏幕并开始拖动。
GID_SCROLL:拖动结束的滚动处理,触笔拖动后抬起处理,
GID_END:拖动结束处理,与GID_SCROLL的不同是这个动作无论怎样拖动结束一定会触发,而GID_SCROLL只在需要做缓冲的时候才会触发,所谓需要做缓冲的时个就是所谓的手势了
消息参数lParam是手势结构体(GESTUREINFO)的Handle,GESTUREINFO结构体包含了当前手势相关的信息:
//typedef struct tagGESTUREINFO
//{
// UINT cbSize; 结构尺寸
// DWORD dwFlags; 手势标志位,标志手势当前的状态,是起始(GF_BEGIN),惯性(GF_INERTIA),结束(GF_END)
// DWORD dwID; /* Gesture ID */
// HWND hwndTarget; /* HWND of target window */
// POINTS ptsLocation; 手势起始点坐标
// DWORD dwInstanceID; /* Gesture Instance ID */
// DWORD dwSequenceID; /* Gesture Sequence ID */
// ULONGLONG ullArguments; /* Arguments specific to gesture */
// UINT cbExtraArguments; /* Size of extra arguments in bytes */
//} GESTUREINFO, * PGESTUREINFO;
另外还有来自目标窗口的数据是必须要记录的,有此数据必须保存:可显示区域,实际显示区域,超出区域(实际显示区域与可显示区域的差值),滚动位移。
消息处理函数
对于以上的消息我们需要建立消息处理函数,一个是定位函数,一个是非定位函数,非定位函数是一个缓冲效果的处理,因此在非定位函数中需要做SetTimer,而后在回调函数中执行目标界面的渐时刷新。定位函数负责立即将界面刷新到当前位置,并调用KillTimer终止非定位函数的定时器.