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

来源:互联网 发布:java和php哪个就业好 编辑:程序博客网 时间:2024/05/21 22:50

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


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

 

环境:

主机:WIN10

开发环境:MDK5.13

MCU:STM32F103



源代码:

gui_widget_progbar.h

[cpp] view plain copy
  1. /** 
  2. * Copyright (c), 2015-2025 
  3. * @file gui_widget_progbar.h 
  4. * @brief 文本控件头文件 
  5. * @author jdh 
  6. * @date 2015/11/22 
  7. */  
  8.   
  9. #ifndef _GUI_WIDGET_PROGBAR_H_  
  10. #define _GUI_WIDGET_PROGBAR_H_  
  11.   
  12. /********************************************************************* 
  13. *                           头文件 
  14. **********************************************************************/  
  15.   
  16. #include "gui_interface.h"  
  17.   
  18. /********************************************************************* 
  19. *                           宏定义 
  20. **********************************************************************/  
  21.   
  22. /** 
  23. * @brief 文本长度.单位:字节 
  24. */  
  25.   
  26. #define LEN_WIDGET_TEXT             32  
  27.   
  28. /********************************************************************* 
  29. *                           数据结构 
  30. **********************************************************************/  
  31.   
  32. /** 
  33. * @brief 进度条数据结构 
  34. */  
  35.   
  36. typedef struct _Widget_Progbar  
  37. {  
  38.     //x轴位置  
  39.     uint16_t x;  
  40.     //y轴位置  
  41.     uint16_t y;  
  42.     //水平尺寸  
  43.     uint16_t xsize;  
  44.     //垂直尺寸  
  45.     uint16_t ysize;  
  46. }*Widget_Progbar_Handle;  
  47.   
  48. /********************************************************************* 
  49. *                           函数 
  50. **********************************************************************/  
  51.   
  52. /** 
  53. * @brief 创建控件 
  54. * @param x:左上角x坐标 
  55. * @param y:左上角y坐标 
  56. * @param xsize:水平尺寸 
  57. * @param ysize:垂直尺寸 
  58. * @retval 控件句柄 
  59. */  
  60.   
  61. Widget_Progbar_Handle gui_widget_progbar_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize);  
  62.   
  63. /** 
  64. * @brief 设置进度 
  65. * @param value:百分比,0-100 
  66. */  
  67.   
  68. void gui_widget_progbar_set_value(Widget_Progbar_Handle handle,uint8_t value);  
  69.   
  70. #endif  

gui_widget_progbar.c

[cpp] view plain copy
  1. <strong>/** 
  2. * Copyright (c), 2015-2025 
  3. * @file gui_widget_progbar.c 
  4. * @brief 进度条控件主文件 
  5. * @author jdh 
  6. * @date 2015/11/22 
  7. */  
  8.   
  9. /********************************************************************* 
  10. *                           头文件 
  11. **********************************************************************/  
  12.   
  13. #include "gui_widget_progbar.h"  
  14. #include "gui_2d_lib.h"  
  15. #include "stdlib.h"  
  16.   
  17. /********************************************************************* 
  18. *                           静态变量 
  19. **********************************************************************/  
  20.   
  21. /** 
  22. * @brief 百分比 
  23. */  
  24.   
  25. static uint8_t Percent = 0;  
  26.   
  27. /********************************************************************* 
  28. *                           静态函数 
  29. **********************************************************************/  
  30.   
  31. /** 
  32. * @brief 控件显示 
  33. * @param handle:控件句柄 
  34. */  
  35.   
  36. static void show(Widget_Progbar_Handle handle);  
  37.   
  38. /********************************************************************* 
  39. *                           函数 
  40. **********************************************************************/  
  41.   
  42. /** 
  43. * @brief 创建控件 
  44. * @param x:左上角x坐标 
  45. * @param y:左上角y坐标 
  46. * @param xsize:水平尺寸 
  47. * @param ysize:垂直尺寸 
  48. * @retval 控件句柄 
  49. */  
  50.   
  51. Widget_Progbar_Handle gui_widget_progbar_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize)  
  52. {  
  53.     Widget_Progbar_Handle handle;  
  54.       
  55.     //控件初始化  
  56.     handle = malloc(sizeof(*handle));  
  57.     handle->x = x;  
  58.     handle->y = y;  
  59.     handle->xsize = xsize;  
  60.     handle->ysize = ysize;  
  61.       
  62.     //显示  
  63.     show(handle);  
  64.       
  65.     return handle;  
  66. }  
  67.   
  68. /** 
  69. * @brief 设置进度 
  70. * @param value:百分比,0-100 
  71. */  
  72.   
  73. void gui_widget_progbar_set_value(Widget_Progbar_Handle handle,uint8_t value)  
  74. {  
  75.     if (Percent == value)  
  76.     {  
  77.         return;  
  78.     }  
  79.       
  80.     if (value < Percent)  
  81.     {  
  82.         //清除区域  
  83.         gui_fill_rect(handle->x,handle->y,handle->x + handle->xsize,handle->y + handle->ysize,0);  
  84.         //显示  
  85.         gui_draw_rect(handle->x,handle->y,handle->x + handle->xsize,handle->y + handle->ysize);  
  86.     }  
  87.       
  88.     //显示  
  89.     gui_fill_rect(handle->x + handle->xsize * Percent / 100,handle->y,  
  90.                   handle->x + handle->xsize * value / 100,handle->y + handle->ysize,1);  
  91.     Percent = value;  
  92. }  
  93.   
  94. /** 
  95. * @brief 控件显示 
  96. * @param handle:控件句柄 
  97. */  
  98.   
  99. static void show(Widget_Progbar_Handle handle)  
  100. {  
  101.     //清除区域  
  102.     gui_fill_rect(handle->x,handle->y,handle->x + handle->xsize,handle->y + handle->ysize,0);  
  103.     //显示  
  104.     gui_draw_rect(handle->x,handle->y,handle->x + handle->xsize,handle->y + handle->ysize);  
  105.     Percent = 0;  
  106. }  
  107. </strong>  

测试代码:

[cpp] view plain copy
  1. //进度条  
  2. static Widget_Progbar_Handle Widget_Progbar;  
  3. Widget_Progbar = gui_widget_progbar_create(9,39,111,8);  
  4. gui_widget_progbar_set_value(Widget_Progbar,50); 
0 0