UCGUI实现滑屏的设计思路

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;

               .......


}


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





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值