emWin电脑端模拟器之Progress Bar进度条控件

2025-11-21 04:11:06

1、在目录SeggerEval_WIN32_MSVC_MinGW_GUI_V542中打开SimulationTrial.sln解决方案。

打开SWIPELIST_Demo.c文件,找到MainTask()函数,即为入口函数。

打开LCDConf.h文件,找到#define XSIZE_PHYS 800   #define YSIZE_PHYS 500修改模拟器屏幕尺寸大小。

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

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);

}

}

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

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);

}

}

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

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);

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

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;

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

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);

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

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);

}

}

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

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;

}

}

}

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

emWin电脑端模拟器之Progress Bar进度条控件

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢