×
单片机 > 单片机程序设计 > 详情

为OLED屏增加GUI支持4:文本框控件

发布时间:2020-07-08 发布时间:
|

环境:

主机:WIN10

开发环境:MDK5.13

MCU:STM32F103


说明:

本文定义了文本框控件。在gui中增加了字库支持后,就可以用文本框来显示字符。



源代码:

gui_widget_text.h


  1. /** 

  2. * Copyright (c), 2015-2025 

  3. * @file gui_widget_text.h 

  4. * @brief 文本控件头文件 

  5. * @author jdh 

  6. * @date 2015/9/8 

  7. */  

  8.   

  9. #ifndef _GUI_WIDGET_TEXT_H_  

  10. #define _GUI_WIDGET_TEXT_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_Text  

  37. {  

  38.     //x轴位置  

  39.     uint16_t x;  

  40.     //y轴位置  

  41.     uint16_t y;  

  42.     //水平尺寸  

  43.     uint16_t xsize;  

  44.     //垂直尺寸  

  45.     uint16_t ysize;  

  46.     //字体  

  47.     uint8_t font;  

  48.     //文本  

  49.     char s[LEN_WIDGET_TEXT];  

  50. }*Widget_Text_Handle;  

  51.   

  52. /********************************************************************* 

  53. *                           函数 

  54. **********************************************************************/  

  55.   

  56. /** 

  57. * @brief 创建控件text 

  58. * @param x:左上角x坐标 

  59. * @param y:左上角y坐标 

  60. * @param xsize:水平尺寸 

  61. * @param ysize:垂直尺寸 

  62. * @param font:字体 

  63. * @param s:文本 

  64. * @retval 控件句柄 

  65. */  

  66.   

  67. Widget_Text_Handle gui_widget_text_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize,uint8_t font,char *s);  

  68.   

  69. /** 

  70. * @brief 设置文本 

  71. * @param s:文本 

  72. */  

  73.   

  74. void gui_widget_text_set_text(Widget_Text_Handle handle,uint8_t font,char *s);  

  75.   

  76. #endif  



gui_widget_text.c


  1. /** 

  2. * Copyright (c), 2015-2025 

  3. * @file gui_widget_text.c 

  4. * @brief 文本控件主文件 

  5. * @author jdh 

  6. * @date 2015/9/8 

  7. */  

  8.   

  9. /********************************************************************* 

  10. *                           头文件 

  11. **********************************************************************/  

  12.   

  13. #include "gui_widget_text.h"  

  14. #include "gui_2d_lib.h"  

  15. #include "gui_text_lib.h"  

  16. #include "stdlib.h"  

  17. #include "string.h"  

  18.   

  19. /********************************************************************* 

  20. *                           静态函数 

  21. **********************************************************************/  

  22.   

  23. /** 

  24. * @brief 控件显示 

  25. * @param handle:控件句柄 

  26. */  

  27.   

  28. static void show(Widget_Text_Handle handle);  

  29.   

  30. /********************************************************************* 

  31. *                           函数 

  32. **********************************************************************/  

  33.   

  34. /** 

  35. * @brief 创建控件text 

  36. * @param x:左上角x坐标 

  37. * @param y:左上角y坐标 

  38. * @param xsize:水平尺寸 

  39. * @param ysize:垂直尺寸 

  40. * @param font:字体 

  41. * @param s:文本 

  42. * @retval 控件句柄 

  43. */  

  44.   

  45. Widget_Text_Handle gui_widget_text_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize,uint8_t font,char *s)  

  46. {  

  47.     Widget_Text_Handle handle;  

  48.       

  49.     //控件初始化  

  50.     handle = malloc(sizeof(*handle));  

  51.     handle->x = x;  

  52.     handle->y = y;  

  53.     handle->xsize = xsize;  

  54.     handle->ysize = ysize;  

  55.     handle->font = font;  

  56.     strcpy(handle->s,s);  

  57.       

  58.     //显示  

  59.     show(handle);  

  60.       

  61.     return handle;  

  62. }  

  63.   

  64. /** 

  65. * @brief 设置文本 

  66. * @param s:文本 

  67. */  

  68.   

  69. void gui_widget_text_set_text(Widget_Text_Handle handle,uint8_t font,char *s)  

  70. {  

  71.     handle->font = font;  

  72.     strcpy(handle->s,s);  

  73.       

  74.     //显示  

  75.     show(handle);  

  76. }  

  77.   

  78. /** 

  79. * @brief 控件显示 

  80. * @param handle:控件句柄 

  81. */  

  82.   

  83. static void show(Widget_Text_Handle handle)  

  84. {  

  85.     //清除区域  

  86.     gui_fill_rect(handle->x,handle->y,handle->x + handle->xsize,handle->y + handle->ysize,0);  

  87.     //显示  

  88.     gui_disp_string_at(handle->x,handle->y,handle->font,handle->s);  

  89. }  



使用示例:


  1. Widget_Text_Handle Widget_Text_State;  

  2. Widget_Text_State = gui_widget_text_create(93,40,30,20,GB18030_20X20,"正常");  




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计