我把战舰板的程序移植到7寸屏,还做了点点修改:
//画圆角矩形/填充圆角矩形按钮
//sx,sy,ex,ey:圆角矩形的位置和尺寸
//r:圆角的半径.
//mode:0,画矩形框;1,填充矩形.
//upcolor:上半部分颜色
//downcolor:下半部分颜色
void gui_draw_arcrectangle(u16 sx,u16 sy,u16 ex,u16 ey,u16 r,u8 mode,u16 upcolor,u16 downcolor,u8 *str,u8 size)
{
u16 height=ey-sy+1;
u16 btnxh=0;
if(height%2)btnxh=height+1;//基偶数处理
else btnxh=height;
if(mode)//填充
{
LCD_Fill(sx+r,sy,ex-r,sy+btnxh/2,upcolor); //中上
LCD_Fill(sx+r,sy+btnxh/2,ex-r,ey,downcolor); //中下
LCD_Fill(sx,sy+r,sx+r,sy+btnxh/2,upcolor); //左上
LCD_Fill(sx,sy+btnxh/2,sx+r,ey-r,downcolor); //左下
LCD_Fill(ex-r,sy+r,ex,sy+btnxh/2,upcolor); //右上
LCD_Fill(ex-r,sy+btnxh/2,ex,ey-r,downcolor); //右下
}else
{
LCD_DrawLine(sx+r,sy,ex-r,sy+btnxh/2,upcolor); //上
LCD_DrawLine(sx+r,sy+btnxh/2,ex-r,ey,downcolor); //下
LCD_DrawLine(sx,sy+r,sx+r,sy+btnxh/2,upcolor); //左上
LCD_DrawLine(sx,sy+btnxh/2,sx+r,ey-r,downcolor); //左下
LCD_DrawLine(ex-r,sy+r,ex,sy+btnxh/2,upcolor); //右上
LCD_DrawLine(ex-r,sy+btnxh/2,ex,ey-r,downcolor); //右下
}
gui_fill_circle(sx+r,sy+r,r,upcolor); //左上
gui_fill_circle(sx+r,ey-r,r,downcolor); //左下
gui_fill_circle(ex-r,sy+r,r,upcolor); //右上
gui_fill_circle(ex-r,ey-r,r,downcolor); //右下
Show_Str_Mid(sx,sy,ex,ey,str,size); //显示按钮上的文字
}
然后在主程序里显示: gui_draw_arcrectangle(728,180,788,210,4,1,LIGHTBLUE,LIGHTBLUE,"恢复状态",12);
这些都没问题的,能够显示出来,可是当初始坐标SX取值比较大的时候,要显示的字符串u8 *st里只要是数字或字母的就无法显示出来。
比如: gui_draw_arcrectangle(515,300,595,330,4,1,LIGHTBLUE,LIGHTBLUE,"精度为5mm",12);
这个时候只能显示出“精度为 ”,而“5MM”是空白的,不能显示出来。但是当:
gui_draw_arcrectangle(215,300,295,330,4,1,LIGHTBLUE,LIGHTBLUE,"精度为5mm",12);时,就都能显示出来。
请问原子哥我这是哪里出了问题呢?
|