为OLED屏添加GUI支持6:进度条控件

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.

环境:

主机:WIN10

开发环境:MDK5.13

MCU:STM32F103

源码:

gui_widget_progbar.h

/**
* Copyright (c), 2015-2025
* @file gui_widget_progbar.h
* @brief 文本控件头文件
* @author jdh
* @date 2015/11/22
*/ #ifndef _GUI_WIDGET_PROGBAR_H_
#define _GUI_WIDGET_PROGBAR_H_ /*********************************************************************
* 头文件
**********************************************************************/ #include "gui_interface.h" /*********************************************************************
* 宏定义
**********************************************************************/ /**
* @brief 文本长度.单位:字节
*/ #define LEN_WIDGET_TEXT 32 /*********************************************************************
* 数据结构
**********************************************************************/ /**
* @brief 进度条数据结构
*/ typedef struct _Widget_Progbar
{
//x轴位置
uint16_t x;
//y轴位置
uint16_t y;
//水平尺寸
uint16_t xsize;
//垂直尺寸
uint16_t ysize;
}*Widget_Progbar_Handle; /*********************************************************************
* 函数
**********************************************************************/ /**
* @brief 创建控件
* @param x:左上角x坐标
* @param y:左上角y坐标
* @param xsize:水平尺寸
* @param ysize:垂直尺寸
* @retval 控件句柄
*/ Widget_Progbar_Handle gui_widget_progbar_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize); /**
* @brief 设置进度
* @param value:百分比,0-100
*/ void gui_widget_progbar_set_value(Widget_Progbar_Handle handle,uint8_t value); #endif

gui_widget_progbar.c

/**
* Copyright (c), 2015-2025
* @file gui_widget_progbar.c
* @brief 进度条控件主文件
* @author jdh
* @date 2015/11/22
*/ /*********************************************************************
* 头文件
**********************************************************************/ #include "gui_widget_progbar.h"
#include "gui_2d_lib.h"
#include "stdlib.h" /*********************************************************************
* 静态变量
**********************************************************************/ /**
* @brief 百分比
*/ static uint8_t Percent = 0; /*********************************************************************
* 静态函数
**********************************************************************/ /**
* @brief 控件显示
* @param handle:控件句柄
*/ static void show(Widget_Progbar_Handle handle); /*********************************************************************
* 函数
**********************************************************************/ /**
* @brief 创建控件
* @param x:左上角x坐标
* @param y:左上角y坐标
* @param xsize:水平尺寸
* @param ysize:垂直尺寸
* @retval 控件句柄
*/ Widget_Progbar_Handle gui_widget_progbar_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize)
{
Widget_Progbar_Handle handle; //控件初始化
handle = malloc(sizeof(*handle));
handle->x = x;
handle->y = y;
handle->xsize = xsize;
handle->ysize = ysize; //显示
show(handle); return handle;
} /**
* @brief 设置进度
* @param value:百分比,0-100
*/ void gui_widget_progbar_set_value(Widget_Progbar_Handle handle,uint8_t value)
{
if (Percent == value)
{
return;
} if (value < Percent)
{
//清除区域
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 控件显示
* @param handle:控件句柄
*/ static void show(Widget_Progbar_Handle handle)
{
//清除区域
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;
}

測试代码:

//进度条
static Widget_Progbar_Handle Widget_Progbar;
Widget_Progbar = gui_widget_progbar_create(9,39,111,8);
gui_widget_progbar_set_value(Widget_Progbar,50);

效果图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

为OLED屏添加GUI支持6:进度条控件的更多相关文章

  1. 为OLED屏添加GUI支持3:字库

    为OLED屏添加GUI支持3:字库 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:STM3 ...

  2. 为OLED屏添加GUI支持2:2D图形库

    为OLED屏添加GUI支持2:2D图形库 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:S ...

  3. 为OLED屏增加GUI支持

    为OLED屏增加GUI支持1:OLED驱动 为OLED屏增加GUI支持2:2D图形库 为OLED屏增加GUI支持3:字库 为OLED屏增加GUI支持4:文本框控件 为OLED屏增加GUI支持5:图片控 ...

  4. 图像分辨率 像素 大小 LCD显示 为OLED屏增加GUI支持

    1. 根据一张标准图片的分辨率,结合每个像素的大小,可以计算得到这张图片的大小(字节数) 补充点:bmp格式的图片有24色或者32色.(其一个像素点可能占用24bits或者32bits)  至于图片怎 ...

  5. DevExpress的进度条控件ProgressBarControl的使用-以ZedGraph添加曲线进度为例

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  6. 在DevExpress GridControl中添加进度条控件 z

    首先可以使用 DevExpress GridControl 自带的进度条控件. 但是我要用一个方法来设置所有的单元格进度,而不是每个单元格都要设置一遍,同时我想要根据进度值不同,进度条显示不同的颜色. ...

  7. Photoshop和WPF双剑配合,打造炫酷个性的进度条控件

    现在如果想打造一款专业的App,UI的设计和操作的简便性相当重要.UI设计可以借助Photoshop或者AI等设计工具,之前了解到WPF设计工具Expression Blend可以直接导入PSD文件或 ...

  8. HslControls组件库 工业控件库 曲线控件 时间控件 管道控件 温度计控件 阀门控件 传送带控件 进度条控件 电池控件 数码管控件等等

    本篇博客主要对 HslControls 组件做一个大概的总览介绍,更详细的内容可以参照页面里的子链接,还有github上的源代码,然后进行相关的学习,和使用. Prepare 先从nuget下载到组件 ...

  9. 示例:WPF中Slider控件封装的缓冲播放进度条控件

    原文:示例:WPF中Slider控件封装的缓冲播放进度条控件 一.目的:模仿播放器播放进度条,支持缓冲任务功能 二.进度: 实现类似播放器中带缓存的播放样式(播放区域.缓冲区域.全部区域等样式) 实现 ...

随机推荐

  1. StringBuilder和+来串接字符串,时间的比较

    一:程序比较 1.使用+ 2.使用的时间 虽然时间一直在变动,但是仍然可以看到时间在1000ms左右 3.使用StringBuilder 4.使用的时间 虽然时间每次在变化,但是时间在350ms左右变 ...

  2. SqlServer 添加用户 添加角色 分配权限

    转载自:https://www.cnblogs.com/accumulater/p/6158387.html   --创建一个简单的登录,登录名为:newlogin:登录密码:123456:默认数据库 ...

  3. POJ 1222 熄灯问题【高斯消元】

    <题目链接> 题目大意: 有一个5*6的矩阵,每一位是0或者1. 没翻转一位,它的上下左右的数字也为改变.(0变成1,1变成0).要把矩阵中所有的数都变成0.求最少翻转次数的方案,输出矩阵 ...

  4. 【Java并发核心六】CompletionService

    CompletionService 接口的功能是以异步的方式一边生产新的任务,一边处理已完成任务的结果,这样就可以将执行任务与处理任务分离开. CompletionService 仅有一个实现类 Ex ...

  5. shell find

    find   -name april*                     在当前目录下查找以april开始的文件 find    /   -amin    -10     # 查找在系统中最后1 ...

  6. 断言(assert)

    断言(assert):用来调试.测试代码. 格式: assert 布尔表达式: 字符串 (如果布尔表达式为false时,这个字符串才会显示). 注意: assert默认是关闭的,使用时需要使用&quo ...

  7. vue+ElementUI使用笔记

    1,使用表单验证: //定义验证规则 window.varifyUtil = { //验证数字 validateNumber: function(rule, value, callback){ if ...

  8. IT常用英文术语解释发音

    associations 联系; 协会( association的名词复数 ); 联合; (思想.感觉.记忆等的) 联想; 按色赛诶神 == desktop ˈdesktɒp  的思克头铺 英[ˈde ...

  9. bzoj4709: [Jsoi2011]柠檬 斜率优化

    题目链接 bzoj4709: [Jsoi2011]柠檬 题解 斜率优化 设 \(f[i]\) 表示前 \(i\)个数分成若干段的最大总价值. 对于分成的每一段,左端点的数.右端点的数.选择的数一定是相 ...

  10. 洛谷P1525 关押罪犯

    To 洛谷.1525 关押罪犯 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用 ...