#include "mywin_inc.h" #include "mywin_user_backlightset.h" #include "date.h" #define WIN_BACKLIGHTSETBOX_TYPE "WIN_BackLightSetboxStruct" WIN_BackLightSetboxStruct *WIN_CreatBackLightSetbox (WIN_WindowStruct *base, void (*msgLoop)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg), int x,int y,int x_size,int y_size) { //重设消息循环 if (msgLoop==0) { msgLoop=(void (*)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg))BACKLIGHTSETBOX_defaultMsgLoop; } WIN_BackLightSetboxStruct *ret=mymalloc (sizeof ( WIN_BackLightSetboxStruct)); //调用父类的构造函数 if (ret) { mymemset (ret,0,sizeof ( WIN_BackLightSetboxStruct)); if (0==WIN_CreatWindowExt((WIN_WindowStruct *)ret,base,msgLoop,x,y,x_size,y_size)) { //创建失败 myfree (ret); ret=0; } else { ((WIN_WindowStruct *)ret)->winType=WIN_BACKLIGHTSETBOX_TYPE; //构造一个消息框 ret->title="显示设置"; ret->light=ui_getScreenBrightness(); ret->autoLight=ui_getScreenAutoLight(); ret->offTime=ui_getScreenOffTime(); ret->lightSave=ret->light; } } return ret; } void BACKLIGHTSETBOX_Add (WIN_BackLightSetboxStruct *backlightsetbox) { if (backlightsetbox->index==0) { if (backlightsetbox->offTime<30*60) backlightsetbox->offTime+=30; } else if (backlightsetbox->index==1) { if (backlightsetbox->light<100) backlightsetbox->light+=10; if (backlightsetbox->light>100) backlightsetbox->light=100; ui_setScreenBrightness (backlightsetbox->light); } else if (backlightsetbox->index==2) { backlightsetbox->autoLight=!backlightsetbox->autoLight; } } void BACKLIGHTSETBOX_Sub (WIN_BackLightSetboxStruct *backlightsetbox) { if (backlightsetbox->index==0) { if (backlightsetbox->offTime>0) backlightsetbox->offTime-=30; if (backlightsetbox->offTime<0) backlightsetbox->offTime=0; } else if (backlightsetbox->index==1) { if (backlightsetbox->light>1) backlightsetbox->light-=10; if (backlightsetbox->light<1) backlightsetbox->light=1; ui_setScreenBrightness (backlightsetbox->light); } else if (backlightsetbox->index==2) { backlightsetbox->autoLight=!backlightsetbox->autoLight; } } //消息框的绘制函数 void BACKLIGHTSETBOX_DefaultPaint (WIN_BackLightSetboxStruct *backlightsetbox) { int x=0; int y=0; int x_size=((WIN_WindowStruct *)backlightsetbox)->x_size; int y_size=((WIN_WindowStruct *)backlightsetbox)->y_size; char txt_buff[20]={0}; WIN_PaintBackGround ((WIN_WindowStruct *)backlightsetbox); //绘制标题 WIN_SetFontMode(WIN_DRAWMODE_ALONE); WIN_SetLcdColor(((WIN_WindowStruct *)backlightsetbox)->color); WIN_DrawTxtHCenterAt (backlightsetbox->title,x_size/2,y); y+=WIN_GetFontHight(); //绘制选中框 int rect_y_step=(y_size-WIN_GetFontHight())/3; int rect_x=x; int rect_y=y; int rect_xsize=x_size; int rect_ysize=rect_y_step; WIN_SetLcdColor(0x00ff0080); if (backlightsetbox->index<3) { rect_y+=rect_ysize*backlightsetbox->index; WIN_FillRectByColor (rect_x,rect_y,rect_xsize,rect_ysize); } //显示文本 WIN_SetLcdColor(((WIN_WindowStruct *)backlightsetbox)->color); sprintf (txt_buff,"%d 秒后自动休眠",backlightsetbox->offTime); WIN_DrawTxtHCenterAt (txt_buff,x_size/2,y+rect_y_step/2-WIN_GetFontHight()/2); sprintf (txt_buff,"亮度 %d",backlightsetbox->light); WIN_DrawTxtHCenterAt (txt_buff,x_size/2,y+rect_y_step/2-WIN_GetFontHight()/2+rect_y_step); if (backlightsetbox->autoLight) WIN_DrawTxtHCenterAt ("自动亮度 ★",x_size/2,y+rect_y_step/2-WIN_GetFontHight()/2+rect_y_step*2); else WIN_DrawTxtHCenterAt ("自动亮度 ☆",x_size/2,y+rect_y_step/2-WIN_GetFontHight()/2+rect_y_step*2); } //消息框的消息处理函数 void BACKLIGHTSETBOX_defaultMsgLoop (WIN_BackLightSetboxStruct *backlightsetbox,WIN_MsgStruct *msg) { WIN_MoveStruct *m=0; WIN_KeyStruct *k=0; switch (msg->msg) { case WIN_MSG_PAINT: BACKLIGHTSETBOX_DefaultPaint(backlightsetbox); break; case WIN_MSG_INIT: break; case WIN_MSG_KEY: k=msg->data.p; //收到确定或返回键 if (k->shortPress&KEY_VALUE_UP) { BACKLIGHTSETBOX_Add (backlightsetbox); } else if (k->shortPress&KEY_VALUE_DOWN) { BACKLIGHTSETBOX_Sub (backlightsetbox); } else if (k->shortPress&KEY_VALUE_ENTER) { if (backlightsetbox->index<2) backlightsetbox->index++; else backlightsetbox->index=0; } if (k->shortPress) { WIN_SetInvalidRect ((WIN_WindowStruct *)backlightsetbox,0,16,((WIN_WindowStruct *)backlightsetbox)->x_size,((WIN_WindowStruct *)backlightsetbox)->y_size-16); } if (k->shortPress&KEY_VALUE_HOME) { ui_setScreenBrightness (backlightsetbox->lightSave); MSGBOX_TipsTime ((WIN_WindowStruct *)backlightsetbox,"提示","设置没有保存","确定",5000); ((WIN_WindowStruct *)backlightsetbox)->deleteWindow((WIN_WindowStruct *)backlightsetbox); } else if (k->longPress&KEY_VALUE_ENTER) { ui_setScreenAutoLight (backlightsetbox->autoLight); ui_setScreenOffTime (backlightsetbox->offTime); ui_setScreenBrightness (backlightsetbox->light); MSGBOX_TipsTime ((WIN_WindowStruct *)backlightsetbox,"提示","设置已保存","确定",5000); ((WIN_WindowStruct *)backlightsetbox)->deleteWindow((WIN_WindowStruct *)backlightsetbox); } break;//case WIN_MSG_KEY: case WIN_MSG_TOUCH: break; case WIN_MSG_CHID: break; case WIN_MSG_DELETE: break; case WIN_MSG_TIMER: //定时器时间到 ((WIN_WindowStruct *)backlightsetbox)->deleteWindow((WIN_WindowStruct *)backlightsetbox); break; case WIN_MSG_MOVE: m=msg->data.p; switch (m->moveType) { case MOVE_DATA_MOVEIN: break; case MOVE_DATA_MOVED: break; case MOVE_DATA_LONG: break; case MOVE_DATA_MOVEOUT: case MOVE_DATA_OUTSIDE: backlightsetbox->press=0; WIN_SetInvalidRect ((WIN_WindowStruct *)backlightsetbox,0,((WIN_WindowStruct *)backlightsetbox)->y_size-16,((WIN_WindowStruct *)backlightsetbox)->x_size,16); break; case MOVE_DATA_TOUCHOUT: if (backlightsetbox->press) ((WIN_WindowStruct *)backlightsetbox)->deleteWindow((WIN_WindowStruct *)backlightsetbox); break; case MOVE_DATA_TOUCHIN: backlightsetbox->press=1; //WIN_SetInvalid ((WIN_WindowStruct *)msgbox); WIN_SetInvalidRect ((WIN_WindowStruct *)backlightsetbox,0,((WIN_WindowStruct *)backlightsetbox)->y_size-16,((WIN_WindowStruct *)backlightsetbox)->x_size,16); break; default: WIN_DefaultMsgLoop((WIN_WindowStruct *)backlightsetbox,msg); break; } break; default: WIN_DefaultMsgLoop((WIN_WindowStruct *)backlightsetbox,msg); break; } } //显示设置 int BACKLIGHTSETBOX_BackLightSet (void) { WIN_BackLightSetboxStruct *backlightsetbox=WIN_CreatBackLightSetbox (0,0,WIN_GetBaseWindow()->x_size/4,WIN_GetBaseWindow()->y_size/4, WIN_GetBaseWindow()->x_size/2,WIN_GetBaseWindow()->y_size/2); WIN_ShowWindow((WIN_WindowStruct *)backlightsetbox); return WIN_RunBlock ((WIN_WindowStruct *)backlightsetbox); }