Progress Bar进度条控件通常应用在程序中用于实现可视化;例如,油罐液位指示器或油压指示器,文件传输等等。
方法/步骤
-
1
在目录SeggerEval_WIN32_MSVC_MinGW_GUI_V542中打开SimulationTrial.sln解决方案。
打开SWIPELIST_Demo.c文件,找到MainTask()函数,即为入口函数。
打开LCDConf.h文件,找到#define XSIZE_PHYS 800 #define YSIZE_PHYS 500修改模拟器屏幕尺寸大小。
-
2
int LCD_XWIDTH_SIZE = 0;
int LCD_YHIGH_SIZE = 0;
void MainTask(void)
{
GUI_Init();
GUI_UC_SetEncodeUTF8();
GUI_SetBkColor(GUI_WHITE);
GUI_SetColor(GUI_BLUE);
GUI_Clear();
LCD_XWIDTH_SIZE = LCD_GetXSize();
LCD_YHIGH_SIZE = LCD_GetYSize();
GUI_SetColor(0xFF901E);
GUI_FillRect(0, 0, LCD_XWIDTH_SIZE, 30);
GUI_SetFont(&GUI_Font8x18);
GUI_SetBkColor(0xFF901E);
GUI_SetColor(GUI_WHITE);
GUI_DispStringAt("emWin Demo For Progress Bar", 270, 7);
GUI_SetColor(0xFF901E);
GUI_DrawLine(560, 31, 560, LCD_YHIGH_SIZE);
GUI_SetColor(GUI_BLACK);
GUI_SetBkColor(GUI_WHITE);
GUI_DispStringAt("LCD X Physics Size : px", 570, 45);
GUI_DispDecAt(LCD_XWIDTH_SIZE, 735, 45, 3);
GUI_DispStringAt("LCD Y Physics Size : px", 570, 70);
GUI_DispDecAt(LCD_YHIGH_SIZE, 735, 70, 3);
GUI_DrawLine(560, 95, LCD_XWIDTH_SIZE, 95);
while (1)
{
GUI_Delay(200);
}
}
-
3
#define PROG_BAR1_MIN_VALUE 0
#define PROG_BAR2_MIN_VALUE 0
#define PROG_BAR3_MIN_VALUE 1000
#define PROG_BAR1_MAX_VALUE 99
#define PROG_BAR2_MAX_VALUE 500
#define PROG_BAR3_MAX_VALUE 9999
int LCD_XWIDTH_SIZE = 0;
int LCD_YHIGH_SIZE = 0;
void MainTask(void)
{
PROGBAR_Handle progBar1;
PROGBAR_Handle progBar2;
PROGBAR_Handle progBar3;
int curValueBar1 = PROG_BAR1_MIN_VALUE;
int curValueBar2 = PROG_BAR2_MIN_VALUE;
int curValueBar3 = PROG_BAR3_MIN_VALUE;
GUI_Init();
GUI_UC_SetEncodeUTF8();
GUI_SetBkColor(GUI_WHITE);
GUI_SetColor(GUI_BLUE);
GUI_Clear();
GUI_DispStringAt("Progress Bar1", 50, 70);
progBar1 = PROGBAR_CreateEx(170, 65, 300, 20, 0, (WM_CF_SHOW | WM_CF_CONST_OUTLINE), 0, 0);
PROGBAR_SetFont(progBar1, &GUI_Font8x18);
PROGBAR_SetMinMax(progBar1, PROG_BAR1_MIN_VALUE, PROG_BAR1_MAX_VALUE);
PROGBAR_SetValue(progBar1, PROG_BAR1_MIN_VALUE);
GUI_DispStringAt("Progress Bar2", 50, 120);
progBar2 = PROGBAR_CreateEx(170, 115, 300, 20, 0, (WM_CF_SHOW | WM_CF_CONST_OUTLINE), 0, 0);
PROGBAR_SetFont(progBar2, &GUI_Font8x18);
PROGBAR_SetMinMax(progBar2, PROG_BAR2_MIN_VALUE, PROG_BAR2_MAX_VALUE);
PROGBAR_SetValue(progBar2, PROG_BAR2_MIN_VALUE);
GUI_DispStringAt("Progress Bar3", 50, 170);
progBar3 = PROGBAR_CreateEx(170, 165, 300, 20, 0, (WM_CF_SHOW | WM_CF_CONST_OUTLINE), 0, 0);
PROGBAR_SetFont(progBar3, &GUI_Font8x18);
PROGBAR_SetMinMax(progBar3, PROG_BAR3_MIN_VALUE, PROG_BAR3_MAX_VALUE);
PROGBAR_SetValue(progBar3, PROG_BAR3_MIN_VALUE);
GUI_DrawLine(0, 230, 560, 230);
while (1)
{
GUI_Delay(200);
}
}
-
4
在指定位置创建指定大小的 PROGBAR 控件。
PROGBAR_Handle PROGBAR_CreateEx(int x0, int y0,
int xSize, int ySize,
WM_HWIN hParent, int WinFlags,
int ExFlags, int Id);
选择 PROGBAR 控件内显示的文本的字体。
void PROGBAR_SetFont(PROGBAR_Handle hObj, const GUI_FONT * pFont);
设置 PROGBAR 控件的最小值和最大值。
void PROGBAR_SetMinMax(PROGBAR_Handle hObj, int Min, int Max);
设置 PROGBAR 控件的值。
void PROGBAR_SetValue(PROGBAR_Handle hObj, int v);
-
5
进度条最小值和最大值
#define PROG_BAR1_MIN_VALUE 0
#define PROG_BAR2_MIN_VALUE 0
#define PROG_BAR3_MIN_VALUE 1000
#define PROG_BAR1_MAX_VALUE 99
#define PROG_BAR2_MAX_VALUE 500
#define PROG_BAR3_MAX_VALUE 9999
进度条句柄
PROGBAR_Handle progBar1;
PROGBAR_Handle progBar2;
PROGBAR_Handle progBar3;
进度条当前值
int curValueBar1 = PROG_BAR1_MIN_VALUE;
int curValueBar2 = PROG_BAR2_MIN_VALUE;
int curValueBar3 = PROG_BAR3_MIN_VALUE;
-
6
初始化 emWin 内部数据结构和变量。
int GUI_Init(void);
启用 UTF-8 编码。
void GUI_UC_SetEncodeUTF8(void);
设置当前背景色。
GUI_COLOR GUI_SetBkColor(GUI_COLOR Color);
设置当前前景色。
void GUI_SetColor(GUI_COLOR Color);
清除当前窗口。
void GUI_Clear(void);
分别返回 LCD 的物理 X 尺寸和 Y 尺寸 (单位:像素)。
int LCD_GetXSize(void);
int LCD_GetYSize(void);
在当前窗口中的指定位置绘制填充的矩形区域。
void GUI_FillRect(int x0, int y0, int x1, int y1);
设置用于文本输出的字体。
const GUI_FONT * GUI_SetFont(const GUI_FONT * pNewFont);
在当前窗口的指定位置处,使用当前字体显示作为参数的字符串。
void GUI_DispStringAt(const char * s, int x, int y);
在当前窗口中绘制从某个指定起点到某个指定终点之间的线(绝对坐标)。
void GUI_DrawLine(int x0, int y0, int x1, int y1);
在当前窗口的指定位置处,使用当前字体显示指定字符数的十进制数值。
void GUI_DispDecAt(I32 v, I16P x, I16P y, U8 Len);
-
7
#define PROG_BAR1_MIN_VALUE 0
#define PROG_BAR2_MIN_VALUE 0
#define PROG_BAR3_MIN_VALUE 1000
#define PROG_BAR1_MAX_VALUE 99
#define PROG_BAR2_MAX_VALUE 500
#define PROG_BAR3_MAX_VALUE 9999
int LCD_XWIDTH_SIZE = 0;
int LCD_YHIGH_SIZE = 0;
void MainTask(void)
{
GUI_DispStringAt("Progress Bar2", 50, 120);
progBar2 = PROGBAR_CreateEx(170, 115, 300, 20, 0, (WM_CF_SHOW | WM_CF_CONST_OUTLINE), 0, 0);
PROGBAR_SetFont(progBar2, &GUI_Font8x18);
PROGBAR_SetMinMax(progBar2, PROG_BAR2_MIN_VALUE, PROG_BAR2_MAX_VALUE);
PROGBAR_SetValue(progBar2, PROG_BAR2_MIN_VALUE);
GUI_DispStringAt("Progress Bar3", 50, 170);
progBar3 = PROGBAR_CreateEx(170, 165, 300, 20, 0, (WM_CF_SHOW | WM_CF_CONST_OUTLINE), 0, 0);
PROGBAR_SetFont(progBar3, &GUI_Font8x18);
PROGBAR_SetMinMax(progBar3, PROG_BAR3_MIN_VALUE, PROG_BAR3_MAX_VALUE);
PROGBAR_SetValue(progBar3, PROG_BAR3_MIN_VALUE);
GUI_DrawLine(0, 230, 560, 230);
GUI_DispStringAt("Items", 20, 260);
GUI_DispStringAt("Bar1", 25, 290);
GUI_DispStringAt("Bar2", 25, 320);
GUI_DispStringAt("Bar3", 25, 350);
GUI_DispStringAt("Progress", 150, 260);
GUI_DispDecAt(PROG_BAR1_MIN_VALUE, 170, 290, 2);
GUI_DispDecAt(PROG_BAR2_MIN_VALUE, 170, 320, 3);
GUI_DispDecAt(PROG_BAR3_MIN_VALUE, 170, 350, 4);
GUI_DispStringAt("Remain", 300, 260);
GUI_DispDecAt(PROG_BAR1_MAX_VALUE, 310, 290, 2);
GUI_DispDecAt(PROG_BAR2_MAX_VALUE, 310, 320, 3);
GUI_DispDecAt(PROG_BAR3_MAX_VALUE, 310, 350, 4);
while (1)
{
GUI_Delay(200);
}
}
-
8
#define PROG_BAR1_MIN_VALUE 0
#define PROG_BAR2_MIN_VALUE 0
#define PROG_BAR3_MIN_VALUE 1000
#define PROG_BAR1_MAX_VALUE 99
#define PROG_BAR2_MAX_VALUE 500
#define PROG_BAR3_MAX_VALUE 9999
int LCD_XWIDTH_SIZE = 0;
int LCD_YHIGH_SIZE = 0;
void MainTask(void)
{
PROGBAR_Handle progBar1;
PROGBAR_Handle progBar2;
PROGBAR_Handle progBar3;
int curValueBar1 = PROG_BAR1_MIN_VALUE;
int curValueBar2 = PROG_BAR2_MIN_VALUE;
int curValueBar3 = PROG_BAR3_MIN_VALUE;
int flagBar2 = 0;
GUI_Init();
GUI_UC_SetEncodeUTF8();
GUI_SetBkColor(GUI_WHITE);
GUI_SetColor(GUI_BLUE);
GUI_Clear();
LCD_XWIDTH_SIZE = LCD_GetXSize();
LCD_YHIGH_SIZE = LCD_GetYSize();
GUI_SetColor(0xFF901E);
GUI_FillRect(0, 0, LCD_XWIDTH_SIZE, 30);
GUI_SetFont(&GUI_Font8x18);
GUI_SetBkColor(0xFF901E);
GUI_SetColor(GUI_WHITE);
GUI_DispStringAt("emWin Demo For Progress Bar", 270, 7);
GUI_SetColor(0xFF901E);
GUI_DrawLine(560, 31, 560, LCD_YHIGH_SIZE);
GUI_SetColor(GUI_BLACK);
GUI_SetBkColor(GUI_WHITE);
GUI_DispStringAt("LCD X Physics Size : px", 570, 45);
GUI_DispDecAt(LCD_XWIDTH_SIZE, 735, 45, 3);
GUI_DispStringAt("LCD Y Physics Size : px", 570, 70);
GUI_DispDecAt(LCD_YHIGH_SIZE, 735, 70, 3);
GUI_DrawLine(560, 95, LCD_XWIDTH_SIZE, 95);
GUI_DispStringAt("Progress Bar1", 50, 70);
progBar1 = PROGBAR_CreateEx(170, 65, 300, 20, 0, (WM_CF_SHOW | WM_CF_CONST_OUTLINE), 0, 0);
PROGBAR_SetFont(progBar1, &GUI_Font8x18);
PROGBAR_SetMinMax(progBar1, PROG_BAR1_MIN_VALUE, PROG_BAR1_MAX_VALUE);
PROGBAR_SetValue(progBar1, PROG_BAR1_MIN_VALUE);
GUI_DispStringAt("Progress Bar2", 50, 120);
progBar2 = PROGBAR_CreateEx(170, 115, 300, 20, 0, (WM_CF_SHOW | WM_CF_CONST_OUTLINE), 0, 0);
PROGBAR_SetFont(progBar2, &GUI_Font8x18);
PROGBAR_SetMinMax(progBar2, PROG_BAR2_MIN_VALUE, PROG_BAR2_MAX_VALUE);
PROGBAR_SetValue(progBar2, PROG_BAR2_MIN_VALUE);
GUI_DispStringAt("Progress Bar3", 50, 170);
progBar3 = PROGBAR_CreateEx(170, 165, 300, 20, 0, (WM_CF_SHOW | WM_CF_CONST_OUTLINE), 0, 0);
PROGBAR_SetFont(progBar3, &GUI_Font8x18);
PROGBAR_SetMinMax(progBar3, PROG_BAR3_MIN_VALUE, PROG_BAR3_MAX_VALUE);
PROGBAR_SetValue(progBar3, PROG_BAR3_MIN_VALUE);
GUI_DrawLine(0, 230, 560, 230);
GUI_DispStringAt("Items", 20, 260);
GUI_DispStringAt("Bar1", 25, 290);
GUI_DispStringAt("Bar2", 25, 320);
GUI_DispStringAt("Bar3", 25, 350);
GUI_DispStringAt("Progress", 150, 260);
GUI_DispDecAt(PROG_BAR1_MIN_VALUE, 170, 290, 2);
GUI_DispDecAt(PROG_BAR2_MIN_VALUE, 170, 320, 3);
GUI_DispDecAt(PROG_BAR3_MIN_VALUE, 170, 350, 4);
GUI_DispStringAt("Remain", 300, 260);
GUI_DispDecAt(PROG_BAR1_MAX_VALUE, 310, 290, 2);
GUI_DispDecAt(PROG_BAR2_MAX_VALUE, 310, 320, 3);
GUI_DispDecAt(PROG_BAR3_MAX_VALUE, 310, 350, 4);
while (1)
{
GUI_Delay(200);
if (curValueBar1 > PROG_BAR1_MAX_VALUE)
curValueBar1 = PROG_BAR1_MIN_VALUE;
if (curValueBar3 > PROG_BAR3_MAX_VALUE)
curValueBar3 = PROG_BAR3_MIN_VALUE;
PROGBAR_SetValue(progBar1, curValueBar1);
GUI_DispDecAt(curValueBar1, 170, 290, 2);
GUI_DispDecAt(PROG_BAR1_MAX_VALUE - curValueBar1, 310, 290, 2);
PROGBAR_SetValue(progBar2, curValueBar2);
GUI_DispDecAt(curValueBar2, 170, 320, 3);
GUI_DispDecAt(PROG_BAR2_MAX_VALUE - curValueBar2, 310, 320, 3);
PROGBAR_SetValue(progBar3, curValueBar3);
GUI_DispDecAt(curValueBar3, 170, 350, 4);
GUI_DispDecAt(PROG_BAR3_MAX_VALUE - curValueBar3, 310, 350, 4);
curValueBar1++;
curValueBar3 += 29;
if (flagBar2)
{
curValueBar2 -= 9;
if (curValueBar2 <= PROG_BAR2_MIN_VALUE)
flagBar2 = 0;
}
else
{
curValueBar2 += 7;
if (curValueBar2 >= PROG_BAR2_MAX_VALUE)
flagBar2 = 1;
}
}
}
END
注意事项
-
本人原创经验,仅供参考,若有不足之处请留言指正,若觉得写得好或凑合的话,请点击本页面左下角投票,谢谢了\(^o^)/
-
若有任何意见与帮助,请关注后私信留言,非喜勿喷
-
需要相关帮助请投票后关注私信
文章评论