//画出窗口 //windowx:窗口指针 void window_draw(_window_obj *windowx) { u8 winclosebtnsize = 0; //关闭按钮的尺寸 if(windowx == NULL) { return; //无效,直接退出 } if(windowx->type & (1 << 0)) { //圆角窗,仿android的时候,不支持按钮(放了难看) gui_draw_arcrectangle(windowx->left, windowx->top, windowx->width, windowx->captionheight, windowx->arcwinr, 1, windowx->captionbkcu, windowx->captionbkcd); //画出标题栏 gui_fill_rectangle(windowx->left, windowx->top + windowx->captionheight - windowx->arcwinr, windowx->arcwinr, windowx->arcwinr, windowx->captionbkcd); //把下部分不需要的半圆形的部分填充掉1 gui_fill_rectangle(windowx->left + windowx->width - windowx->arcwinr, windowx->top + windowx->captionheight - windowx->arcwinr, windowx->arcwinr, windowx->arcwinr, windowx->captionbkcd); //把下部分不需要的半圆形的部分填充掉2 gui_draw_arcrectangle(windowx->left, windowx->top + windowx->captionheight, windowx->width, windowx->height - windowx->captionheight, windowx->arcwinr, 1, windowx->windowbkc, windowx->windowbkc); //填充空白部分 gui_fill_rectangle(windowx->left, windowx->top + windowx->captionheight, windowx->arcwinr, windowx->arcwinr, windowx->windowbkc); //把上部分不需要的半圆形的部分填充掉1 gui_fill_rectangle(windowx->left + windowx->width - windowx->arcwinr, windowx->top + windowx->captionheight, windowx->arcwinr, windowx->arcwinr, windowx->windowbkc); //把上部分不需要的半圆形的部分填充掉2 gui_draw_arcrectangle(windowx->left, windowx->top, windowx->width, windowx->height, windowx->arcwinr, 0, ARC_WIN_RIM_COLOR, ARC_WIN_RIM_COLOR); //画边框 //画出标题栏 } else { //方角窗 //填充内部 gui_fill_rectangle(windowx->left, windowx->top, windowx->width, windowx->captionheight / 2, windowx->captionbkcu); //填充上半部分 gui_fill_rectangle(windowx->left, windowx->top + windowx->captionheight / 2, windowx->width, windowx->captionheight / 2, windowx->captionbkcd); //填充下半部分 gui_fill_rectangle(windowx->left, windowx->top + windowx->captionheight - 1, windowx->width, windowx->height - windowx->captionheight, windowx->windowbkc); //填充内部 //画边框 gui_draw_rectangle(windowx->left, windowx->top, windowx->width, windowx->height, STD_WIN_RIM_OUTC); //画外框 gui_draw_rectangle(windowx->left + 1, windowx->top + 1, windowx->width - 2, windowx->height - 2, STD_WIN_RIM_MIDC); //画中间框 gui_draw_rectangle(windowx->left + 2, windowx->top + windowx->captionheight - 1, windowx->width - 4, windowx->height - windowx->captionheight - 1, STD_WIN_RIM_INC); //画内框 if(windowx->type & (1 << 7)) { btn_draw(windowx->closebtn);//有按钮的时候需要画按钮. winclosebtnsize = WIN_BTN_SIZE; } } if(windowx->type & (1 << 5)) { gui_show_strmid(windowx->left, windowx->top, windowx->width, windowx->captionheight, windowx->captioncolor, windowx->font, windowx->caption); //显示标题 } else { gui_show_ptstr(windowx->left + WIN_BTN_OFFSIDE, windowx->top + (windowx->captionheight - windowx->font) / 2, windowx->left + windowx->width - 2 * WIN_BTN_OFFSIDE - winclosebtnsize, windowx->top + windowx->captionheight, 0, windowx->captioncolor, windowx->font, windowx->caption, 1); //靠左显示caption } }
//画滚动条 //scbx:滚动条指针 void scrollbar_draw_scrollbar(_scrollbar_obj *scbx) { u32 scbactlen = 0; //滚动条可以滚动的空间长度 if(scbx == NULL) { return; //无效,直接退出 } gui_fill_rectangle(scbx->left, scbx->top, scbx->width, scbx->height, scbx->inbkcolor); gui_draw_rectangle(scbx->left, scbx->top, scbx->width, scbx->height, scbx->rimcolor); if((scbx->type & 0X03) == 0) { //标准滚动条 if((scbx->type & 0x80) == 0) { //水平滚动条 scrollbar_draw_btn(scbx->left, scbx->top, SCROLLBAR_PART_LEN, scbx->height, scbx->btncolor, scbx->rimcolor, SCROLLBAR_SIGN_RCOLOR, SCROLLBAR_SIGN_LEFT); scrollbar_draw_btn(scbx->left + scbx->width - SCROLLBAR_PART_LEN, scbx->top, SCROLLBAR_PART_LEN, scbx->height, scbx->btncolor, scbx->rimcolor, SCROLLBAR_SIGN_RCOLOR, SCROLLBAR_SIGN_RIGHT); scbactlen = scbx->width - 2 * SCROLLBAR_PART_LEN; //可供 滚动条滚动的空间范围 } else { //垂直滚动条 scrollbar_draw_btn(scbx->left, scbx->top, scbx->width, SCROLLBAR_PART_LEN, scbx->btncolor, scbx->rimcolor, SCROLLBAR_SIGN_RCOLOR, SCROLLBAR_SIGN_UP); scrollbar_draw_btn(scbx->left, scbx->top + scbx->height - SCROLLBAR_PART_LEN, scbx->width, SCROLLBAR_PART_LEN, scbx->btncolor, scbx->rimcolor, SCROLLBAR_SIGN_RCOLOR, SCROLLBAR_SIGN_DOWN); scbactlen = scbx->height - 2 * SCROLLBAR_PART_LEN; //可供 滚动条滚动的空间范围 } } else { //没有两端按钮的滚动条 if((scbx->type & 0x80) == 0) { scbactlen = scbx->width; //水平滚动条 } else { scbactlen = scbx->height; //垂直滚动条 } } if(scbx->itemsperpage > scbx->totalitems) { scbx->scbbarlen = scbactlen; } else { scbx->scbbarlen = (scbactlen * scbx->itemsperpage) / scbx->totalitems; //得到滚动条的长度 } scrollbar_setpos(scbx); }
//画滚动条的按键 //x,y,width,height:坐标及尺寸 //bkcolor:背景色 //rimcolor:边框颜色 //signcolor:符号的颜色 //signx:符号编号 0,上;1,下;2,左;3,右;4,垂直;5,水平; void scrollbar_draw_btn(u16 x, u16 y, u16 width, u16 height, u16 bkcolor, u16 rimcolor, u16 signcolor, u8 signx) { gui_fill_rectangle(x, y, width, height, bkcolor); //填充内部颜色 gui_draw_rectangle(x, y, width, height, rimcolor); //画外边框 if(width >= 8 && height >= 8) { //足够画图标 scrollbar_draw_sign(x + width / 2 - 4, y + height / 2 - 4, signcolor, signx); } }
//闹铃处理(尺寸:44*20) //x,y:坐标 //返回值,处理结果 u8 calendar_alarm_msg(u16 x,u16 y) { u8 rval=0; u16 *lcdbuf=0; //LCD显存 lcdbuf=(u16*)gui_memin_malloc(44*20*2); //申请内存 if(lcdbuf) //申请成功 { app_read_bkcolor(x,y,44,20,lcdbuf); //读取背景色 gui_fill_rectangle(x,y,44,20,LIGHTBLUE); gui_draw_rectangle(x,y,44,20,BROWN); gui_show_num(x+2,y+2,2,RED,16,alarm.hour,0X81); gui_show_ptchar(x+2+16,y+2,x+2+16+8,y+2+16,0,RED,16,':',1); gui_show_num(x+2+24,y+2,2,RED,16,alarm.min,0X81); OSTaskSuspend(6); //挂起主任务 while(rval==0) { tp_dev.scan(0); if(tp_dev.sta&TP_PRES_DOWN)//触摸屏被按下 { if(app_tp_is_in_area(&tp_dev,x,y,44,20))//判断某个时刻,触摸屏的值是不是在某个区域内 { rval=0XFF;//取消 break; } } delay_ms(5); if(system_task_return)break; //需要返回 } app_recover_bkcolor(x,y,44,20,lcdbuf); //读取背景色 }else rval=1; system_task_return=0; alarm.ringsta&=~(1<<7); //取消闹铃 calendar_alarm_init((_alarm_obj*)&alarm,&calendar); //重新初始化闹钟 gui_memin_free(lcdbuf); OSTaskResume(6); //恢复主任务 system_task_return=0; return rval; }