LVGL8实现两个窗口的切换方式:
方法一:切换到窗口2时,删除窗口1的容器,这样可以删除窗口1下的所有子对象,这种方式适用于运存较小的设备

方法二:显示窗口1之前给窗口2的容器设置LV_OBJ_FLAG_HIDDEN隐藏属性,显示窗口2之前给窗口1的容器设置LV_OBJ_FLAG_HIDDEN隐藏属性

还是通过codeblock来模拟代码的运行,代码如下:

#define HIDDEN_WIN  (0)
static lv_obj_t *win1_contanier = NULL;
static lv_obj_t *win2_contanier = NULL;static void win_btn_event_callback1(lv_event_t* event);
static void win_btn_event_callback2(lv_event_t* event);static void show_button_win1()
{static lv_style_t obj_style;lv_style_reset(&obj_style);lv_style_init(&obj_style); // 初始化按钮样式lv_style_set_radius(&obj_style, 0); // 设置样式圆角弧度lv_obj_t * btn =NULL;win1_contanier = lv_obj_create(lv_scr_act());  // 基于屏幕创建一个和屏幕大小一样的容器win1_contanierif (win1_contanier != NULL){lv_obj_set_style_bg_color(win1_contanier, lv_palette_main(LV_PALETTE_RED), 0);lv_obj_set_size(win1_contanier, 800, 480);lv_obj_add_style(win1_contanier, &obj_style, 0);btn = lv_btn_create(win1_contanier);if (btn != NULL){lv_obj_set_size(btn, 100, 50);lv_obj_add_event_cb(btn, win_btn_event_callback1, LV_EVENT_ALL, NULL); // 给对象添加CLICK事件和事件处理回调函数lv_obj_center(btn);lv_obj_t *label = lv_label_create(btn); // 给按钮添加标签if (label != NULL){lv_label_set_text(label, "Button1"); // 设置标签文本lv_obj_center(label); // 标签居中显示}}}
}static void show_button_win2()
{static lv_style_t obj_style;lv_style_reset(&obj_style);lv_style_init(&obj_style); // 初始化按钮样式lv_style_set_radius(&obj_style, 0); // 设置样式圆角弧度lv_obj_t * btn =NULL;win2_contanier = lv_obj_create(lv_scr_act()); // 基于屏幕创建一个和屏幕大小一样的容器win2_contanierif (win2_contanier != NULL){lv_obj_set_style_bg_color(win2_contanier, lv_palette_main(LV_PALETTE_BLUE), 0);lv_obj_set_size(win2_contanier, 800, 480);lv_obj_add_style(win2_contanier, &obj_style, 0);btn = lv_btn_create(win2_contanier);if (btn != NULL){lv_obj_set_size(btn, 100, 50);lv_obj_add_event_cb(btn, win_btn_event_callback2, LV_EVENT_ALL, NULL); // 给对象添加CLICK事件和事件处理回调函数lv_obj_center(btn);lv_obj_set_style_bg_color(btn, lv_palette_main(LV_PALETTE_RED), 0);lv_obj_t *label = lv_label_create(btn); // 给按钮添加标签if (label != NULL){lv_label_set_text(label, "Button2"); // 设置标签文本lv_obj_center(label); // 标签居中显示}}}
}static void win_btn_event_callback1(lv_event_t* event)
{lv_event_code_t code = lv_event_get_code(event);if (code == LV_EVENT_CLICKED){
#if HIDDEN_WIN// 给窗口1的容器添加隐藏属性,清除窗口2的隐藏属性lv_obj_add_flag(win1_contanier, LV_OBJ_FLAG_HIDDEN);lv_obj_clear_flag(win2_contanier, LV_OBJ_FLAG_HIDDEN);
#else// 删除窗口1的win1_contanier容器,这样就可以把win1_contanier上的子对象全部删除,然后显示窗口2lv_obj_del(win1_contanier);show_button_win2();
#endif}
}static void win_btn_event_callback2(lv_event_t* event)
{lv_event_code_t code = lv_event_get_code(event);if (code == LV_EVENT_CLICKED){
#if HIDDEN_WIN// 给窗口2的容器添加隐藏属性,清除窗口1的隐藏属性lv_obj_add_flag(win2_contanier, LV_OBJ_FLAG_HIDDEN);lv_obj_clear_flag(win1_contanier, LV_OBJ_FLAG_HIDDEN);
#else// 删除窗口2的win2_contanier容器,这样就可以把win2_contanier上的子对象全部删除,然后显示窗口1lv_obj_del(win2_contanier);show_button_win1();
#endif}
}void lv_win_switch_main()
{show_button_win1();
#if HIDDEN_WINshow_button_win2();// 给窗口2的容器添加隐藏属性lv_obj_add_flag(win2_contanier, LV_OBJ_FLAG_HIDDEN);
#endif
}

运行效果:

LVGL8的窗口切换方式相关推荐

  1. win10 快速窗口切换方式

    win10 快速窗口切换方式: 同时按住Alt键和Tab键 这样同时显示以后 Alt 键不要从 点击Tab 键切换窗口就行啦加粗样式****

  2. emWin 2天速成实例教程002_多个页面窗口切换

    备注:(1)打开工程目录下的"Exe\GUISimulationDebug.exe"即可看到效果.(2)看完教程000-005就基本会用emWin做项目,其他章节可以需要时再参考. ...

  3. Python+Selenium学习笔记8 - 多表单多窗口切换

    1.多表单切换 下图为待测页面:内嵌百度首页 切换到百度首页进行操作 1 #coding = utf-8 2 3 from selenium importwebdriver4 importos5 im ...

  4. 计算机快速切换任务,电脑多任务窗口切换:除了Alt+Tab,你还知道什么?

    平时我们用到电脑时,多半情况是需要同时打开多个窗口的.比如微信.浏览器.办公三件套等等.工作或是学习的时候,难免会在各个窗口以及浏览器不同页面之间来回切换,所以关于切换的方式你都了解了吗? 浏览器页面 ...

  5. Win+Tab键实现自定义程序列表间的窗口切换

    程序是用AutoHotkey语言写的, 说明: 以自己使用频率的顺序在ExeList自定义的程序间切换 切换可以以所有窗口切换,也可以按程序组切换(比如在word窗口间切换) 程序组可以分别定义排除的 ...

  6. web页面:窗口切换

    1.标签页切换 在某个窗口上点击某个链接在新标签页显示新窗口时,如果想要点击新标签页的元素时,需要进行窗口切换. driver.switch_to.window('窗口名称') from seleni ...

  7. 【Unity笔记】连招动画切换方式(一)

    连招动画切换方式(一) 此方法可以实现的连击效果: 通过连续点击鼠标左键 攻击1 接 攻击2 接 攻击3 结束 在任意攻击动作中停止点击鼠标左键,则连击中断 一.Animator中的设置 先将一套连招 ...

  8. 修改Windows 8中文输入法切换方式

    原文地址为: 修改Windows 8中文输入法切换方式 Windows8中默认的只有一个微软拼音输入法,本身这个输入法还算好用,但切换的方式种种不习惯.尤其是我还同时用着Win7的系统,两头切换着实很 ...

  9. 自动化测试——多窗口切换和切换frame

    这里写目录标题 一.多窗口切换 1.base.py:公共代码 2.切换句柄的方式1,通过for循环 3.切换句柄的方式2,通过索引切换 4.源代码 二.frame窗口 1.什么是frame? 2.Fr ...

最新文章

  1. HTML5延迟加载原理
  2. 深入浅出 5种IO模型。
  3. k8s多节点仪表盘(web界面)部署与谷歌浏览器访问k8s仪表盘问题解决!
  4. 强化学习之基础入门_强化学习基础
  5. svg mysql_SVG 实例
  6. 使用faketime修改docker内的时间,解决date: cannot set date: Operation not permitted问题
  7. python安装完毕后,用pip安装,提示找不到ssl模块
  8. Maven常见警告解决办法
  9. eclipse项目如何变成web项目_IntelliJ IDEA 部署 Web 项目,终于搞懂了!
  10. 2021上半年ICPC各类赛事时间日程
  11. WinRunner在项目中的作用
  12. 遇到This application failed to start becauseit could not find...的问题
  13. f1c100A运行linux,荔枝派 Nano 全志 F1C100s 编译运行 Linux 笔记
  14. Python Twisted 简介
  15. Image data cannot be converted to float
  16. ESLint和Prettier的配置
  17. 2021蓝桥杯预选赛题解
  18. 神舟十二号出征星辰大海--麒麟信安操作系统筑牢“千年飞天梦”软件基石
  19. CentOS6 安装gcc编译器,解决【configure: error: no acceptable C compiler found in $PATH】问题
  20. 『PyTorch』学习笔记 2 —— 模型 Finetune

热门文章

  1. 干货!JAVA容器-自问自答学HashMap
  2. Golang调用mssql存储过程
  3. 软件研发管理工具Ones横评,对比国内外主流项目管理软件
  4. 【Set】01-set参数
  5. Visual Studio Community2019 30天试用期过期,无法登录微软账户
  6. Minecraft我的世界开服教程
  7. 数据分析师出品:新媒体运营年终总结模板分享
  8. 微信小程序云开发联表查询【聚合】
  9. 实测超轻量中文OCR开源项目,总模型仅17M
  10. excel筛选后复制粘贴