UCGUI实现滑屏的设计思路

来源:互联网 发布:软件研发合同范本 编辑:程序博客网 时间:2024/06/07 02:14

UCGUI实现滑屏的设计思路

UCGUI是一个轻量级的界面系统,即使如此,我们仍然可以实现一些令人惊喜的界面操作,比如针对一些多窗体,稍作处理,我们就可以实现譬如现代掌上设备常见的滑屏操作。操作要点如下:

1.定义两个左右滑屏跳接的窗体(或对话框,这里以对话框举例)。

比如,hWin1,hWin2(这里用窗体句柄来代表窗体)。hWin1的窗体结构和回调函数为_aDialogCreate1,_cbCallback1,  hWin2的窗体结构和回调函数为_aDialogCreate2,_cbCallback2。


2.响应上面窗体回调函数中的WM_PID_STATE_CHANGED消息。

通过跟踪代码得知,WM_PID_STATE_CHANGED为非控件区捕获触摸屏消息。而其他两个相关消息WM_TOUCH_CHILD,WM_TOUCH则为控件捕获触摸屏消息。即当我们按下非控件区时,会产生WM_PID_STATE_CHANGED消息。上面其他两个消息则为当我们在控件上操作触摸屏时产生的消息。


3.实现思路:

pMsg->Data.p是WM_PID_STATE_CHANGED消息中系统传递过来的一个参数,其为一个WM_PID_STATE_CHANGED_INFO类型的机构体指针。它包含当前触摸屏事件中的x,y轴坐标以及按下抬起的状态。在此,设置一个静态变量记下触摸屏按下时的x坐标,然后在在触摸屏抬起时比较抬起时触摸屏x坐标和上次按下时x坐标的差值,如果大于(右滑)或小于(左滑)某一预定义的值(即在触摸屏上滑过x轴坐标),即判断为右滑或左滑。



4.相关的代码模型如下:


#define TS_SLIDE_MIN_X  100   //滑动的最小X距离值

//===========================================================

//第一个窗体hWin1的消息响应处理,注意这里假设hWin1为当前窗体(其已被创建并显示)。

//且为向右滑动推出第二个窗体hWin2

void _cbCallback1(WM_MESSAGE * pMsg) 
{
......
static int     ts_x;
//static int     ts_y;
WM_PID_STATE_CHANGED_INFO  *pTSState;
......
case WM_PID_STATE_CHANGED:
pTSState = (WM_PID_STATE_CHANGED_INFO*)(pMsg->Data.p);
if (pTSState->State) //按下
{
ts_x =   pTSState->x;
}
else  if ((pTSState->x - ts_x) > TS_SLIDE_MIN_X)
{
WM_HideWindow(hWin1);
if (hWin2 == NULL)
{

hWin2 = GUI_CreateDialogBox(_aDialogCreate2,GUI_COUNTOF(_aDialogCreate2),\

&_cbCallback2, 0, 0, 0);

}
else
{
WM_ShowWindow(hWin2);
}
}
break;
   ........


}



//===========================================================

//第二个窗体hWin2的消息响应处理,注意这里假设hWin2为滑动产生的窗体。

//向左滑动推出第二个窗体hWin2

void _cbCallback1(WM_MESSAGE * pMsg)
{
......
static int     ts_x;
//static int     ts_y;
WM_PID_STATE_CHANGED_INFO  *pTSState;
......
case WM_PID_STATE_CHANGED: //如果点中其他非按钮类

pTSState = (WM_PID_STATE_CHANGED_INFO*)(pMsg->Data.p);

if (pTSState->State) //按下
{
ts_x =   pTSState->x;
}
else  if ((ts_x - pTSState->x) >TS_SLIDE_MIN_X)
{
WM_HideWindow(hWin2);
WM_ShowWindow(hWin1);
}

break;

               .......


}


类此,也可实现上下滑屏。





原创粉丝点击