#include "MainTask.h"
#include "includes.h"
/*
*********************************************************************************************************
* 宏定义
*********************************************************************************************************
*/
#define X_START 60
#define Y_START 40
/*
*********************************************************************************************************
* 变量
*********************************************************************************************************
*/
typedef struct {
int NumBars;
GUI_COLOR Color;
const char * s;
} BAR_DATA;
static const BAR_DATA _aBarData[] = {
{ 2, GUI_RED , "Red" },
{ 2, GUI_GREEN , "Green" },
{ 2, GUI_BLUE , "Blue" },
{ 1, GUI_WHITE , "Grey" },
{ 2, GUI_YELLOW , "Yellow" },
{ 2, GUI_CYAN , "Cyan" },
{ 2, GUI_MAGENTA, "Magenta" },
};
static const GUI_COLOR _aColorStart[] = { GUI_BLACK, GUI_WHITE };
/*
*********************************************************************************************************
* 函 数 名: _DemoShowColorBar
* 功能说明: 显示彩带
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
static void _DemoShowColorBar(void)
{
GUI_RECT Rect;
int yStep;
int i;
int j;
int xSize;
int ySize;
int NumBars;
int NumColors;
//
// 获取显示屏大小
//
xSize = LCD_GetXSize();
ySize = LCD_GetYSize();
//
// 获取能够显示的彩带数
//
NumColors = GUI_COUNTOF(_aBarData);
for (i = NumBars = 0, NumBars = 0; i < NumColors; i++)
{
NumBars += _aBarData[i].NumBars;
}
yStep = (ySize - Y_START) / NumBars;
//
// 显示文本
//
Rect.x0 = 0;
Rect.x1 = X_START - 1;
Rect.y0 = Y_START;
GUI_SetFont(&GUI_Font8x16);
for (i = 0; i < NumColors; i++)
{
Rect.y1 = Rect.y0 + yStep * _aBarData[i].NumBars - 1;
GUI_DispStringInRect(_aBarData[i].s, &Rect, GUI_TA_LEFT | GUI_TA_VCENTER);
Rect.y0 = Rect.y1 + 1;
}
//
// 绘制彩带
//
Rect.x0 = X_START;
Rect.x1 = xSize - 1;
Rect.y0 = Y_START;
for (i = 0; i < NumColors; i++)
{
for (j = 0; j < _aBarData[i].NumBars; j++)
{
Rect.y1 = Rect.y0 + yStep - 1;
GUI_DrawGradientH(Rect.x0, Rect.y0, Rect.x1, Rect.y1, _aColorStart[j], _aBarData[i].Color);
Rect.y0 = Rect.y1 + 1;
}
}
}
/*
*********************************************************************************************************
* 函 数 名: MainTask
* 功能说明: GUI主函数
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void MainTask(void)
{
/* 初始化 */
GUI_Init();
/*
关于多缓冲和窗口内存设备的设置说明
1. 使能多缓冲是调用的如下函数,用户要在LCDConf_Lin_Template.c文件中配置了多缓冲,调用此函数才有效:
WM_MULTIBUF_Enable(1);
2. 窗口使能使用内存设备是调用函数:WM_SetCreateFlags(WM_CF_MEMDEV);
3. 如果emWin的配置多缓冲和窗口内存设备都支持,二选一即可,且务必优先选择使用多缓冲,实际使用
STM32F429BIT6 + 32位SDRAM + RGB565/RGB888平台测试,多缓冲可以有效的降低窗口移动或者滑动时的撕裂
感,并有效的提高流畅性,通过使能窗口使用内存设备是做不到的。
4. 所有emWin例子默认是开启三缓冲。
*/
WM_MULTIBUF_Enable(1);
/*
触摸校准函数默认是注释掉的,电阻屏需要校准,电容屏无需校准。如果用户需要校准电阻屏的话,执行
此函数即可,会将触摸校准参数保存到EEPROM里面,以后系统上电会自动从EEPROM里面加载。
*/
//TOUCH_Calibration();
/* 清屏 */
GUI_SetBkColor(GUI_BLACK);
GUI_Clear();
/* 设置前景色和字体,并显示字符 */
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringHCenterAt("COLOR_ShowColorBar - Sample", 160, 5);
/* 显示彩带 */
_DemoShowColorBar();
while(1)
{
GUI_Delay(10);
}
} |