lvgl学习-解决不了msgbox无法显示的问题

今天使用msgbox也就是消息框控件出现了问题

创建了一个按键,在按键的回调函数里面创建新的label或msgbox,为什么显示不出来?

static void record_event_cb(lv_event_t* e)

{

    lv_obj_t* real_value_text = lv_label_create(container_1);

    lv_label_set_text(real_value_text, line1);

    lv_obj_align(real_value_text, LV_ALIGN_TOP_LEFT, 0, 10 * LINE_SPACING);

}

container_1是当前显示的页面,也就是容纳这个按钮的容器。

首先,我在建立这个container_1页面的函数中,增加了一个本应该很有用的函数:lv_scr_load

void page_1_1(void)

{

    container_1 = lv_obj_create(lv_scr_act());

………

    lv_scr_load(container_1);

}

如果注释掉这个lv_scr_load函数,那么上述的回调函数中的创建text就可以正常进行。

那我们来看看这个lv_scr_load函数到底做了些什么:

首先lv_scr_load直接调用lv_disp_load_scr(scr);

然后lv_disp_load_scr调用lv_scr_load_anim(scr, LV_SCR_LOAD_ANIM_NONE, 0, 0, false);

也就是没有动画的lv_scr_load_anim

lv_scr_load_anim:传参 new_scr

获得当前显示器对象lv_obj_get_disp

    获得当前屏幕lv_scr_act

如果当前有其他屏幕需要被加载, 放弃那个屏幕的动画,让他赶紧加载完

显示器的下一个加载对象(scr_to_load) = new_scr;

如果显示器有上一个屏幕(prev_scr)&&要求删除上一个屏幕(del_prev)//这一句不会执行

    删除上一个屏幕

删除new_scr的动画效果

删除lv_scr_act的动画效果

    lv_obj_set_pos(new_scr, 0, 0);

lv_obj_set_pos(lv_scr_act(), 0, 0);

scr_load_internal(new_scr);

    后面就是一些关于动画的代码了

看来核心就是这个scr_load_internal(new_scr);

获得当前显示器对象lv_obj_get_disp

    获得当前屏幕lv_scr_act

    向当前屏幕发送事件LV_EVENT_SCREEN_UNLOAD_START

    向new_scr发送事件LV_EVENT_SCREEN_LOAD_START

    d->act_scr = scr;

    向new_scr发送事件LV_EVENT_SCREEN_LOADED

    向老屏幕发送事件LV_EVENT_SCREEN_UNLOADED

    lv_obj_invalidate(scr); 将scr的区域标记为invalid,刷新scr的显示

好像得不出什么有用的结论

算了,直接把msgbox画在最顶层吧。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值