Linux项目实战——UI系统、页面系统(后附百问网课程视频链接)

UI系统

一、数据结构抽象

  1. 按钮的名字

  2. 按钮的区域

3.按钮的绘制

4.按钮的事件

cpp 复制代码
typedef struct Button {
	char *name;
    int status;
	Region tRegion;
	int (*OnDraw)(struct Button *ptButton);
	int (*OnPressed)(struct Button *ptButton,PDispBuff ptDispBuff,PInputEvent ptInputEvent);
}Button, *PButton;

二、按键编程

对按键进行初始化,实现抽象出来的结构体。

2.1 实现OnDraw()

需要先实现:

1. 绘制底色

cpp 复制代码
void DrawRegion(PRegion ptRegion, unsigned int dwcolor)

2. 居中绘制文字

cpp 复制代码
void DrawTextInButtonCenter(char *name, PRegion ptRegion, unsigned int dwColor)

①确定每一个字符的大小

② 确定第一个字符的起点

然后就可以将绘制出来的按钮刷到LCD上。

cpp 复制代码
int FlushDisplayRegion(PRegion ptRegion, PDispBuff ptDispBuff)

2.2 实现OnPressed()

通过标志位status判断按键当前的状态,从而选颜色的显示。


页面系统

一、数据结构抽象

cpp 复制代码
typedef struct PageAction {
    char *name;
    void (*Run)(void *pParams);
    struct PageAction *ptNext;
}PageAction,*PPageAction;

二、页面管理器

页面管理器用来管理页面,只需要实现2个函数:

1.PageRegister:把多个页面注册进链表

2.Page(name):取出某个页面

相关推荐
舰长1151 分钟前
linux系统服务器加固1、中风险 未设置登录失败处理功能和登录连接超时处理功能。2、中风险 未限制默认账户的访问权限。3、中风险 未实现管理用户的权限分离。
linux·运维·服务器
mounter62539 分钟前
Linux 7.0 重磅更新:详解 nullfs 如何重塑根文件系统挂载与内核线程隔离
linux·运维·服务器·kernel
心前阳光42 分钟前
UI在指定区域内拖拽
ui·命令模式
色空大师1 小时前
【网站搭建实操(一)环境部署】
java·linux·数据库·mysql·网站搭建
A.A呐2 小时前
【Linux第十三章】缓冲区
linux·服务器
liwulin05062 小时前
【ESP32-S3】通过ROS2使用YDLIDAR X2进行SLAM、自主导航方案选择
单片机·嵌入式硬件
想唱rap3 小时前
Linux线程
java·linux·运维·服务器·开发语言·mysql
cccccc语言我来了3 小时前
Linux(9)操作系统
android·java·linux
是翔仔呐3 小时前
第11章 显示外设驱动:I2C协议OLED屏、SPI协议LCD屏字符/图片/中文显示
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
Lueeee.3 小时前
Linux驱动中为什么既有 sysfs,又有字符设备?以 DHT11 驱动为例彻底讲透
linux·驱动开发