当前位置: 首页 > news >正文

手动移植UGUI

看需求

        首先对硬件的要求,主要是MCU的RAM,和ROM,基本有两三K的RAM就够了,源码就两个文件

源码下载网站

μGUI - free Open Source GUI module for embedded systems | Embedded Lightning

       就这哥两没了,当然ugui.c有个小六千多行,其他版本不知道,我下载的是V0.3版本,过个想来大差不差的。

里面控件就只有

        Window

        Button

        TextBox

        Image

        没了

所以要做出多好看的界面,还得看自己扩展。

大概看了一下,感觉像是LVGL的简化板,要绚丽里的画面就得去详细了解他的控件框架,然后自己添加控件。

看看别人移植后做的简单画面

感觉工业控制上面使用问题不太大

移植也很简单,下载源码,再工程里添加ugui.c和ugui.h两个文件OK

然后就是怎么用了

用法

首先初始化

        ugui的底层接口就是打点,画线,和画块三个函数,确切的说只要给个打点函数就行,但加上另外两个刷屏速度回快一点。

	UG_Init(&gui,(void (*)(UG_S16,UG_S16,UG_COLOR))LCD_DrawPixel,320,240);UG_DriverRegister(DRIVER_DRAW_LINE,(void*) LCD_DrawLine );UG_DriverRegister(DRIVER_FILL_FRAME,(void*) LCD_FillRectangle );UG_DriverEnable(DRIVER_DRAW_LINE);UG_DriverEnable(DRIVER_FILL_FRAME);

然后就OK了

创建一个Window

	UG_WindowCreate(&wind1 , obi_buff_wnd_1,1,window_1_callbak );UG_WindowSetBackColor(&wind1,LCD_WHITE);UG_WindowSetTitleText(&wind1,"ttt");UG_WindowSetTitleTextFont(&wind1,&FONT_8X8);UG_BUTTON btn1;UG_U8   BTIN_ID_0 = 0;UG_ButtonCreate(&wind1,&btn1,BTIN_ID_0,10,10,110,60);UG_ButtonSetFont(&wind1,BTIN_ID_0,&FONT_8X8);UG_ButtonSetText(&wind1,BTIN_ID_0,"BTN1");UG_WindowShow(&wind1);

这样创建完成了,然后在你的主循环里

	while(1){UG_Update();}	

然后就可以显示了

我这边是带触摸了,然后添加触摸也很简单

        只有实时扫描触摸状态然后给到UG_TouchUpdate这个函数,然后UG_Update这个函数就会根据触摸信息,按下的相关控件会调用回调函数处理,例如代码的回调函数window_1_callback,

里面有判断是哪个控件按下,然后处理对应的函数。


UG_WINDOW wind1;
UG_BUTTON btn1;
UG_BUTTON btn2;void window_1_callbak(UG_MESSAGE*arg)
{printf("btn state : %d  \r\n",arg->sub_id);}int main(void)
{HAL_Init();systemClockConfig();uartInit(115200);															//调试串口TP_Init();LCD_Init();																		//TFT unsigned int x = 0,y =100;LCD_FillScreen(LCD_WHITE); // 清屏UG_Init(&gui,(void (*)(UG_S16,UG_S16,UG_COLOR))LCD_DrawPixel,320,240);UG_DriverRegister(DRIVER_DRAW_LINE,(void*) LCD_DrawLine );UG_DriverRegister(DRIVER_FILL_FRAME,(void*) LCD_FillRectangle );UG_DriverEnable(DRIVER_DRAW_LINE);UG_DriverEnable(DRIVER_FILL_FRAME);UG_OBJECT obi_buff_wnd_1[2];UG_WindowCreate(&wind1 , obi_buff_wnd_1,2,window_1_callbak );UG_WindowSetBackColor(&wind1,LCD_WHITE);UG_WindowSetTitleText(&wind1,"ttt");UG_WindowSetTitleTextFont(&wind1,&FONT_8X8);UG_U8   BTIN_ID_0 = 3;UG_U8   BTIN_ID_2 = 2;UG_ButtonCreate(&wind1,&btn1,BTIN_ID_0,10,10,110,60);UG_ButtonSetFont(&wind1,BTIN_ID_0,&FONT_8X8);UG_ButtonSetText(&wind1,BTIN_ID_0,"BTN1");UG_ButtonCreate(&wind1,&btn2,BTIN_ID_2,10,80,110,130);UG_ButtonSetFont(&wind1,BTIN_ID_2,&FONT_8X8);UG_ButtonSetText(&wind1,BTIN_ID_2,"BTN2");UG_WindowShow(&wind1);while(1){if(!TPINTin()){Get_TP_Point(&x,&y);UG_TouchUpdate(x,y,TOUCH_STATE_PRESSED);}else{UG_TouchUpdate(-1,-1,TOUCH_STATE_RELEASED);}UG_Update();}	
}

按下按键时回调函数是根据控件ID确定按的是哪个控件

相关文章:

  • 网络原理1
  • Baklib内容中台AI重构智能服务
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(31):そう
  • graphviz, dot, Error: lost rA sA edge; 独立的模块
  • CVE-2021-34429源码分析与漏洞复现
  • CCF CSP 第37次(2025.03)(3_模板展开_C++)(哈希表+stringstream)
  • Python数据可视化科技图表绘制系列教程(一)
  • 基于Python学习《Head First设计模式》第五章 单件模式
  • Docker部署与应用、指令
  • Qwen与Llama分词器核心差异解析
  • vue3学习
  • C++和C#界面开发方式的全面对比
  • 秋招Day12 - 计算机网络 - IP
  • 相机--相机成像原理和基础概念
  • 基于springboot的图书管理系统的设计与实现
  • Hadoop复习(九)
  • torch.distributed.launch 、 torchrun 和 torch.distributed.run 无法与 nohup 兼容
  • 如何制定数字化转型策略:从理念到落地的全面指南
  • 消费者行为变革下开源AI智能名片与链动2+1模式S2B2C商城小程序的协同创新路径
  • websocket协议
  • 手机网站建立/唐老鸭微信营销软件
  • 建设银行网站预约取款/关键词挖掘工具网站
  • 手机响应式网站开发/网站建站推广
  • 北京做网站公司电话/如何注册域名
  • 青海网站开发公司/网站关键词排名优化客服
  • 泉山徐州网站开发/国外网络推广