为OLED屏增加GUI支持4:文本框控件
2016-12-18 来源:eefocus
环境:
主机:WIN10
开发环境:MDK5.13
MCU:STM32F103
说明:
本文定义了文本框控件。在gui中增加了字库支持后,就可以用文本框来显示字符。
源代码:
gui_widget_text.h
/**
* Copyright (c), 2015-2025
* @file gui_widget_text.h
* @brief 文本控件头文件
* @author jdh
* @date 2015/9/8
*/
#ifndef _GUI_WIDGET_TEXT_H_
#define _GUI_WIDGET_TEXT_H_
/*********************************************************************
* 头文件
**********************************************************************/
#include 'gui_interface.h'
/*********************************************************************
* 宏定义
**********************************************************************/
/**
* @brief 文本长度.单位:字节
*/
#define LEN_WIDGET_TEXT 32
/*********************************************************************
* 数据结构
**********************************************************************/
/**
* @brief 文本框数据结构
*/
typedef struct _Widget_Text
{
//x轴位置
uint16_t x;
//y轴位置
uint16_t y;
//水平尺寸
uint16_t xsize;
//垂直尺寸
uint16_t ysize;
//字体
uint8_t font;
//文本
char s[LEN_WIDGET_TEXT];
}*Widget_Text_Handle;
/*********************************************************************
* 函数
**********************************************************************/
/**
* @brief 创建控件text
* @param x:左上角x坐标
* @param y:左上角y坐标
* @param xsize:水平尺寸
* @param ysize:垂直尺寸
* @param font:字体
* @param s:文本
* @retval 控件句柄
*/
Widget_Text_Handle gui_widget_text_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize,uint8_t font,char *s);
/**
* @brief 设置文本
* @param s:文本
*/
void gui_widget_text_set_text(Widget_Text_Handle handle,uint8_t font,char *s);
#endif
gui_widget_text.c
/**
* Copyright (c), 2015-2025
* @file gui_widget_text.c
* @brief 文本控件主文件
* @author jdh
* @date 2015/9/8
*/
/*********************************************************************
* 头文件
**********************************************************************/
#include 'gui_widget_text.h'
#include 'gui_2d_lib.h'
#include 'gui_text_lib.h'
#include 'stdlib.h'
#include 'string.h'
/*********************************************************************
* 静态函数
**********************************************************************/
/**
* @brief 控件显示
* @param handle:控件句柄
*/
static void show(Widget_Text_Handle handle);
/*********************************************************************
* 函数
**********************************************************************/
/**
* @brief 创建控件text
* @param x:左上角x坐标
* @param y:左上角y坐标
* @param xsize:水平尺寸
* @param ysize:垂直尺寸
* @param font:字体
* @param s:文本
* @retval 控件句柄
*/
Widget_Text_Handle gui_widget_text_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize,uint8_t font,char *s)
{
Widget_Text_Handle handle;
//控件初始化
handle = malloc(sizeof(*handle));
handle->x = x;
handle->y = y;
handle->xsize = xsize;
handle->ysize = ysize;
handle->font = font;
strcpy(handle->s,s);
//显示
show(handle);
return handle;
}
/**
* @brief 设置文本
* @param s:文本
*/
void gui_widget_text_set_text(Widget_Text_Handle handle,uint8_t font,char *s)
{
handle->font = font;
strcpy(handle->s,s);
//显示
show(handle);
}
/**
* @brief 控件显示
* @param handle:控件句柄
*/
static void show(Widget_Text_Handle handle)
{
//清除区域
gui_fill_rect(handle->x,handle->y,handle->x + handle->xsize,handle->y + handle->ysize,0);
//显示
gui_disp_string_at(handle->x,handle->y,handle->font,handle->s);
}
使用示例:
Widget_Text_Handle Widget_Text_State;
Widget_Text_State = gui_widget_text_create(93,40,30,20,GB18030_20X20,'正常');
- 2026款苹果MacBook Pro将“大改”,配备 OLED 屏
- 触摸式OLED显示屏有望重新定义汽车用户界面
- 教你一招辨别真假OLED屏
- LG Display 宣布业界率先量产串联 OLED 笔记本显示屏:寿命翻倍、厚度减少四成
- 全球首款OLED滑移曲面屏汽车面世,京东方供屏!
- 精英STM32F103开发板试用体验:+OLED屏显示功能的实现
- 采用柔性OLED屏,华为发布MatePad Pro
- 集创北方OLED显示驱动芯片助力荣耀X50硬核曲屏实现卓越显示视效
- 比OLED更香!苹果即将商用MicroLED技术:不烧屏
- NO.10 1.3寸OLED显示屏IIC通信(12864驱动芯片)