概述

控件绘制需要书写show()、draw()事件;

控件的绘制有两个部分,一个是背景绘制(draw),一个是前景数据显示刷新(show);

其中draw方法绘制的是控件背景,所谓背景就是指无论show方法如何绘制,都不会覆盖的界面,在界面的创建时候进行调用,绘制背景;

而show方法则是绘制前景数据刷新,也就是说,每当获取新的数据时(即修改了控件属性),系统自刷新特性会调用show方法完成界面前景刷新;但需要注意的是,采用图层模式的绘制方法受单片机内存小的限制,无法构造全部显存完成图层处理,因此会采用拆分调用得到方法即多次调用show方法,每次合成图层的一部分,因此在show方法中,不建议做控件属性修改;

控件的四种显示模式

系统支持4种显示模式,各有特色,需要了解四种模式各自的特点,按实际情况选择;选择之后,需要在绘制屏幕前需要使用对应语句设置绘制模式。

四种显示模式:

模式 进入语句 描述
直接绘制模式 tranmode(0); 直接按指定颜色绘制,特点是速度快、但无法处理背景
背景叠加模式 tranmode(1); 当绘制是63号颜色透明色时,自动叠加背景显示;
图层模式 makelayer(); 在RAM中创建显存,通过多次调用完成多图层叠加显示
半透明图层模式 maketranlayer(); 可以以半透明模式叠加背景显示;

模式一:直接绘制

直接绘制到屏幕,适合固定颜色的背景模式,这种方式特点是速度最快,但是实际应用场景不多

tranmode(0);
//......绘图语句

这个模式,就像UsartGPU的显示一样,进行直接覆盖式绘制显示界面

模式二:背景叠加模式

tranmode(1);
//......绘图语句

或者:

automode(bc);//根据bc颜色值来确定模式,当bc=63时进入tranmode(1);当不等于时,进入tranmode(0);
//......绘图语句

模式三: 图层模式

makelayer();
//......绘图语句
void show()
{   int pw;
    int xx;
    int yy;
    pw=(x2-x1)/2;
    xx=x1+pw;
    yy=y1+pw;
    makelayer();
    if (picn>0)pic(x1,y1,picn);
    drawmeter(xx,yy,hr,90+h*30,hc,5);
    drawmeter(xx,yy,mr,90+m*6,mc,3);
    drawmeter(xx,yy,sr,90+s*6,sc,1);
}

模式四:半透明图层模式

如果把makelayer 换成maketranlayer就可以把控件变成半透明图层模式

详见 maketranlayer