为OLED屏增加GUI支持6:进度条控件
扫描二维码
随时随地手机看文章
环境:
主机:WIN10
开发环境:MDK5.13
MCU:STM32F103
源代码:
gui_widget_progbar.h
/**
*Copyright(c),2015-2025
*@filegui_widget_progbar.h
*@brief文本控件头文件
*@authorjdh
*@date2015/11/22
*/
#ifndef_GUI_WIDGET_PROGBAR_H_
#define_GUI_WIDGET_PROGBAR_H_
/*********************************************************************
*头文件
**********************************************************************/
#include"gui_interface.h"
/*********************************************************************
*宏定义
**********************************************************************/
/**
*@brief文本长度.单位:字节
*/
#defineLEN_WIDGET_TEXT32
/*********************************************************************
*数据结构
**********************************************************************/
/**
*@brief进度条数据结构
*/
typedefstruct_Widget_Progbar
{
//x轴位置
uint16_tx;
//y轴位置
uint16_ty;
//水平尺寸
uint16_txsize;
//垂直尺寸
uint16_tysize;
}*Widget_Progbar_Handle;
/*********************************************************************
*函数
**********************************************************************/
/**
*@brief创建控件
*@paramx:左上角x坐标
*@paramy:左上角y坐标
*@paramxsize:水平尺寸
*@paramysize:垂直尺寸
*@retval控件句柄
*/
Widget_Progbar_Handlegui_widget_progbar_create(uint16_tx,uint16_ty,uint16_txsize,uint16_tysize);
/**
*@brief设置进度
*@paramvalue:百分比,0-100
*/
voidgui_widget_progbar_set_value(Widget_Progbar_Handlehandle,uint8_tvalue);
#endif
gui_widget_progbar.c
/**
*Copyright(c),2015-2025
*@filegui_widget_progbar.c
*@brief进度条控件主文件
*@authorjdh
*@date2015/11/22
*/
/*********************************************************************
*头文件
**********************************************************************/
#include"gui_widget_progbar.h"
#include"gui_2d_lib.h"
#include"stdlib.h"
/*********************************************************************
*静态变量
**********************************************************************/
/**
*@brief百分比
*/
staticuint8_tPercent=0;
/*********************************************************************
*静态函数
**********************************************************************/
/**
*@brief控件显示
*@paramhandle:控件句柄
*/
staticvoidshow(Widget_Progbar_Handlehandle);
/*********************************************************************
*函数
**********************************************************************/
/**
*@brief创建控件
*@paramx:左上角x坐标
*@paramy:左上角y坐标
*@paramxsize:水平尺寸
*@paramysize:垂直尺寸
*@retval控件句柄
*/
Widget_Progbar_Handlegui_widget_progbar_create(uint16_tx,uint16_ty,uint16_txsize,uint16_tysize)
{
Widget_Progbar_Handlehandle;
//控件初始化
handle=malloc(sizeof(*handle));
handle->x=x;
handle->y=y;
handle->xsize=xsize;
handle->ysize=ysize;
//显示
show(handle);
returnhandle;
}
/**
*@brief设置进度
*@paramvalue:百分比,0-100
*/
voidgui_widget_progbar_set_value(Widget_Progbar_Handlehandle,uint8_tvalue)
{
if(Percent==value)
{
return;
}
if(value { //清除区域 gui_fill_rect(handle->x,handle->y,handle->x+handle->xsize,handle->y+handle->ysize,0); //显示 gui_draw_rect(handle->x,handle->y,handle->x+handle->xsize,handle->y+handle->ysize); } //显示 gui_fill_rect(handle->x+handle->xsize*Percent/100,handle->y, handle->x+handle->xsize*value/100,handle->y+handle->ysize,1); Percent=value; } /** *@brief控件显示 *@paramhandle:控件句柄 */ staticvoidshow(Widget_Progbar_Handlehandle) { //清除区域 gui_fill_rect(handle->x,handle->y,handle->x+handle->xsize,handle->y+handle->ysize,0); //显示 gui_draw_rect(handle->x,handle->y,handle->x+handle->xsize,handle->y+handle->ysize); Percent=0; } 测试代码: //进度条 staticWidget_Progbar_HandleWidget_Progbar; Widget_Progbar=gui_widget_progbar_create(9,39,111,8); gui_widget_progbar_set_value(Widget_Progbar,50); 效果图: