1 进度条控件介绍
进度条通常在应用程序中用于实现虚拟化,下面的截图是设置了皮肤和没有设置皮肤时的显示效果:
没有皮肤
有皮肤
2 程序代码:
(程序是参考安福莱《stm32-V5开发板STemwin教程》)
#include "stm32f10x.h"
#include "bsp_led.h"
#include "GUI.h"
#include "diskio.h"
#include "bsp_touch.h"
#include "bsp_SysTick.h"
#include "bsp_usart1.h"
#include "bsp_fsmc_sram.h"
#include "PROGBAR.h"
extern void Touch_MainTask(void);
extern void Fatfs_MainTask(void);
static void _DemoProgBar();
int main(void)
{
Touch_Init();
SysTick_Init();
FSMC_SRAM_Init();
// disk_initialize(0);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
GUI_Init();
USART1_Config();
DEBUG("\r\n wildfire ISO board emWin test \r\n");
GUI_Delay (20);
// #if 0
// Touch_MainTask();
// #else
// Fatfs_MainTask();
// #endif
while(1)
{
_DemoProgBar();
}
}
//显示进度条
static void _DemoProgBar()
{
int i;
PROGBAR_Handle ahProgBar[2];
GUI_SetBkColor(GUI_BLACK);
/*设置进度条的皮肤*/
//PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringAt("Progress",100,80);
/*创建两个进度条*/
ahProgBar[0] = PROGBAR_Create(100,100,100,20, WM_CF_SHOW);
//ahProgBar[0]=PROGBAR_CreateEx(100,100,100,20, 0,PROGBAR_CF_HORIZONTAL,WM_CF_SHOW,15);
ahProgBar[1] = PROGBAR_Create( 80,150,140,10, WM_CF_SHOW);
/*使用内存设备,两个进度条都使用*/
/*PROGBAR_EnableMemdev()函数是一个宏定义*/
PROGBAR_EnableMemdev(ahProgBar[0]);
PROGBAR_EnableMemdev(ahProgBar[1]);
/*设置第二个进度条的大小范围*/
PROGBAR_SetMinMax(ahProgBar[1], 0, 500);
PROGBAR_SetFont(ahProgBar[0], &GUI_Font8x16);
GUI_Delay(500);
while(1)
{
PROGBAR_SetFont(ahProgBar[0], &GUI_Font8x16);
if(LCD_GetDevCap(LCD_DEVCAP_BITSPERPIXEL) <= 4)
{
/*设置进度条的颜色*/
PROGBAR_SetBarColor(ahProgBar[0], 0, GUI_DARKGRAY);
PROGBAR_SetBarColor(ahProgBar[0], 1, GUI_LIGHTGRAY);
}
else
{
PROGBAR_SetBarColor(ahProgBar[0], 0, GUI_GREEN);
PROGBAR_SetBarColor(ahProgBar[0], 1, GUI_RED);
}
/*设置文字的对其方式*/
PROGBAR_SetTextAlign(ahProgBar[0], GUI_TA_HCENTER);
/*设置要显示的文字*/
PROGBAR_SetText(ahProgBar[0], NULL);
/*显示进度*/
for(i=0; i<=100; i++)
{
PROGBAR_SetValue(ahProgBar[0], i);
PROGBAR_SetValue(ahProgBar[1], i);
GUI_Delay(5);
}
PROGBAR_SetText(ahProgBar[0], "Tank empty");
/*动态显示数值*/
for (;i>=0; i--)
{
PROGBAR_SetValue(ahProgBar[0], i);
PROGBAR_SetValue(ahProgBar[1], 200-i);
GUI_Delay(5);
}
PROGBAR_SetText(ahProgBar[0],"Any text...");
/*设置文本对其方式*/
PROGBAR_SetTextAlign(ahProgBar[0], GUI_TA_LEFT);
for (;i<=100; i++)
{
PROGBAR_SetValue(ahProgBar[0], i);
PROGBAR_SetValue(ahProgBar[1], 200+i);
GUI_Delay(5);
}
PROGBAR_SetTextAlign(ahProgBar[0], GUI_TA_RIGHT);
for (;i>=0; i--)
{
PROGBAR_SetValue(ahProgBar[0], i);
PROGBAR_SetValue(ahProgBar[1], 400-i);
GUI_Delay(5);
}
PROGBAR_SetFont(ahProgBar[0], &GUI_FontComic18B_1);
PROGBAR_SetText(ahProgBar[0], "Any font...");
for (;i<=100; i++)
{
PROGBAR_SetValue(ahProgBar[0], i);
PROGBAR_SetValue(ahProgBar[1], 400+i);
GUI_Delay(5);
}
GUI_Delay(500);
} //end while
}
/*********************************************END OF FILE**********************/
3 存在的问题
(1)PROGBAR_Create()设置进度条的方式在emwin5.12手册中已经被PROGBAR_CreateEx()函数取代,但是我在本程序中使用PROGBAR_CreateEx()函数创建进度条并没有成功。
(2)进度条换肤函数
PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
在程序中我已经注释掉,因为我用这个函数换肤后的效果并不美观。
以上这两个问题还有待进一步研究。