为OLED屏增加GUI支持4:文本框控件
扫描二维码
随时随地手机看文章
环境:
主机:WIN10
开发环境:MDK5.13
MCU:STM32F103
说明:
本文定义了文本框控件。在gui中增加了字库支持后,就可以用文本框来显示字符。
源代码:
gui_widget_text.h
/**
*Copyright(c),2015-2025
*@filegui_widget_text.h
*@brief文本控件头文件
*@authorjdh
*@date2015/9/8
*/
#ifndef_GUI_WIDGET_TEXT_H_
#define_GUI_WIDGET_TEXT_H_
/*********************************************************************
*头文件
**********************************************************************/
#include"gui_interface.h"
/*********************************************************************
*宏定义
**********************************************************************/
/**
*@brief文本长度.单位:字节
*/
#defineLEN_WIDGET_TEXT32
/*********************************************************************
*数据结构
**********************************************************************/
/**
*@brief文本框数据结构
*/
typedefstruct_Widget_Text
{
//x轴位置
uint16_tx;
//y轴位置
uint16_ty;
//水平尺寸
uint16_txsize;
//垂直尺寸
uint16_tysize;
//字体
uint8_tfont;
//文本
chars[LEN_WIDGET_TEXT];
}*Widget_Text_Handle;
/*********************************************************************
*函数
**********************************************************************/
/**
*@brief创建控件text
*@paramx:左上角x坐标
*@paramy:左上角y坐标
*@paramxsize:水平尺寸
*@paramysize:垂直尺寸
*@paramfont:字体
*@params:文本
*@retval控件句柄
*/
Widget_Text_Handlegui_widget_text_create(uint16_tx,uint16_ty,uint16_txsize,uint16_tysize,uint8_tfont,char*s);
/**
*@brief设置文本
*@params:文本
*/
voidgui_widget_text_set_text(Widget_Text_Handlehandle,uint8_tfont,char*s);
#endif
gui_widget_text.c
/**
*Copyright(c),2015-2025
*@filegui_widget_text.c
*@brief文本控件主文件
*@authorjdh
*@date2015/9/8
*/
/*********************************************************************
*头文件
**********************************************************************/
#include"gui_widget_text.h"
#include"gui_2d_lib.h"
#include"gui_text_lib.h"
#include"stdlib.h"
#include"string.h"
/*********************************************************************
*静态函数
**********************************************************************/
/**
*@brief控件显示
*@paramhandle:控件句柄
*/
staticvoidshow(Widget_Text_Handlehandle);
/*********************************************************************
*函数
**********************************************************************/
/**
*@brief创建控件text
*@paramx:左上角x坐标
*@paramy:左上角y坐标
*@paramxsize:水平尺寸
*@paramysize:垂直尺寸
*@paramfont:字体
*@params:文本
*@retval控件句柄
*/
Widget_Text_Handlegui_widget_text_create(uint16_tx,uint16_ty,uint16_txsize,uint16_tysize,uint8_tfont,char*s)
{
Widget_Text_Handlehandle;
//控件初始化
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);
returnhandle;
}
/**
*@brief设置文本
*@params:文本
*/
voidgui_widget_text_set_text(Widget_Text_Handlehandle,uint8_tfont,char*s)
{
handle->font=font;
strcpy(handle->s,s);
//显示
show(handle);
}
/**
*@brief控件显示
*@paramhandle:控件句柄
*/
staticvoidshow(Widget_Text_Handlehandle)
{
//清除区域
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_HandleWidget_Text_State;
Widget_Text_State=gui_widget_text_create(93,40,30,20,GB18030_20X20,"正常");