一、存储设备的作用
存储设备可在各种情况下使用,主要用于防止在绘制重叠项目时出现显示器闪烁。其基本思想很简
单。不使用存储设备时,绘制操作直接写入显示器。屏幕在执行绘制操作时随时更新,从而在进行各
种更新时使屏幕闪烁。例如,如果要在背景中绘制一个位图,在前景中绘制一些透明文本,应首先绘
制位图,然后绘制文本。效果将是文本出现闪烁。
但是,如果在此过程中使用存储设备,则所有绘制操作都在存储器中执行。仅在所有操作都完成后才
将最终结果显示在屏幕上,其优点是没有闪烁。在下节的示例中可以看到这种差异,该示例展示了在
使用和不使用存储设备时的一系列绘制操作。
差别可归纳如下:如果不使用存储设备,则可以看到一步步的绘制操作效果,缺点是会出现显示器闪
烁。使用存储设备时,一次可见到所有例程的效果,就象单次操作一样,不能实际看见中间步骤。如
上所述,其优点是完全消除了显示器的闪烁,这也是通常所期望的。
二、存储设备的使用
1、使用存储设备需要在GUI_Config.h文件中把相关的宏定义置1
#define GUI_SUPPORT_MEMDEV 1
2、存储设备的相关API
GUI_MEMDEV_CopyToLCD(GUI_MEMDEV_Handle hMem) //将存储设备的内容从内存复制到 LCD,参数为存储设备的句柄
GUI_MEMDEV_Handle GUI_MEMDEV_Create(int x0, int y0, int XSize, int YSize)//创建一个新的存储设备,x0,y0为存储设备起始位置,xsize,ysize为存储设备的大小,返回为存储设备的句柄
GUI_MEMDEV_Delete(GUI_MEMDEV_Handle MemDev);//删除存储设备
void GUI_MEMDEV_Select(GUI_MEMDEV_Handle hMem)//激活存储设备,参数为存储设备的句柄,如果参数为0,则激活LCD,当存储设备激活后,执行绘制操作则在存储设备上绘制,而不会显示到LCD上,需要调用GUI_MEMDEV_CopyToLCD()函数才能在LCD上显示
3、存储设备的使用流程
a.创建存储设备 GUI_MEMDEV_Create()
b.选择存储设备 GUI_MEMDEV_Select()
c.执行绘制操作 draw
d.复制到LCD上 GUI_MEMDEV_CopyToLCD()
e.删除存储设备 GUI_MEMDEV_Delete()
三、分段存储设备
使用存储设备的最大好处就是防止屏幕闪烁,使用存储设备的时候首先通过执行指定绘制函数来填充存储设备,填充后,将存储设备中的内容绘制到LCD中,但是有时候没有用于一次性存储整个输出区域的内存可用,此时分段存储设备就派上用场了,分段存储设备将绘制区域分成多段,每段包含当前可用内存可包含的最多行。
其实分段存储设备就只有一个API函数
int GUI_MEMDEV_Draw(GUI_RECT* pRect,GUI_CALLBACK_VOID_P *pfDraw,void *pData,int NumLines,int Flags)
//pRect:所使用的LCD区域的结构指针,pfDraw:执行回调函数的指针,pData:传给回调函数的参数,NumLines:0或者存储设备的函数
四、自动存储设备
用于只更新LCD的一小部分内容,如鼠标指针。自动存储设备以分段存储设备为基础,对于一次仅更新显示器一小部分的应用可言更高效。该设备会自动识别包含固定对象的显示器区域,以及包含必须更新的移动或者更改对象的区域。使用自动设备的对象主要优势是计算时间减少,因为它始终不更新整个显示器
GUI_MEMDEV_CreateAuto() //创建自动设备
GUI_MEMDEV_DeleteAuto() //删除自动设备
GUI_MEMDEV_DrawAuto ()//使用自动设备