|
发表于 2014-2-21 16:42:29
|
显示全部楼层
本帖最后由 鼻儿眼睛花 于 2014-2-21 16:50 编辑
你这个程序结构无法做大,我的方法是使用链表创建控件循环检测,每个控件拥有自己的回调函数,回调函数的入口参数包含了控件的各种消息,比如单击,双击,滑动,立刻重绘等等消息,这样GUI可以做的非常复杂。
这是我的创建控件:
NMBTN_NormalButtonCreate(&M_EnterLaysor,LCD_WIDTH-85-120,LCD_HEIGHT-38,100,35,1,0);
NMBTN_SetText(&M_EnterLaysor,"激光传感器监测");
NMBTN_SetCallBack(&M_EnterLaysor,&APP_RobotCheckEnterLaysor);
这是我的回调函数:
void APP_RobotCheckEnterLaysor(void *Handle,MsgType msg)
{
NMBTN_SetInCallBack(Handle,1);
switch(msg)
{
case BTN_MOVEIN:
break;
case BTN_MOVEOUT:
break;
case BTN_MESSAGESEND:
EnterLaysor^=1;
if(EnterLaysor==1)
{
short i=0,j=LCD_WIDTH/2;
for(;i<=j;i++)
{
GUICore_DrawVLine(j-i,20,239,0);
GUICore_DrawVLine(j+i,20,239,0);
GUICore_Delay(0x3fff);
}
NMBTN_ButtonDisable(&M_ReturnButton,0);
BTN_HideBotton(&CANButton,0);
BTN_HideBotton(&CANButton2,0);
NMBTN_SetPos(&M_EnterLaysor,M_EnterLaysor.x0+100,M_EnterLaysor.y0);
NMBTN_SetText(&M_EnterLaysor,"Í˳ö¼à²â");
NMBTN_ButtonUpdate(&M_EnterLaysor,BTNNOTPRESSED);
ShowBigNum(0,10,30,RGB(255,0,0),6);
}
else
{
NMBTN_ButtonDisable(&M_ReturnButton,1);
if(CANIsOpen==0)
{
BTN_HideBotton(&CANButton,1);
}
else
{
BTN_HideBotton(&CANButton2,1);
}
NMBTN_SetPos(&M_EnterLaysor,M_EnterLaysor.x0-100,M_EnterLaysor.y0);
NMBTN_SetText(&M_EnterLaysor,"¼¤¹âÆ÷¼à²â");
APP_RobotCheckReDraw();
NMBTN_ButtonUpdate(&M_EnterLaysor,BTNNOTPRESSED);
}
break;
case BTN_REDRAW_NOTPRESSED:
break;
case BTN_REDRAW_PRESSED:
break;
default:
break;
}
NMBTN_SetInCallBack(Handle,0);
}
程序员,我觉得要做到一劳永逸,你那种方法当你再次开发系统的时候,你会发现非常恼火,以上是我的方案简述,希望对你有所帮助。
|
|