080、LVGL消息框按钮与回调

080、LVGL消息框按钮与回调
LVGL消息框按钮与回调:从一次死机调试说起上周五晚上,一个做智能家居的客户发来一段视频:他们的触控面板在弹出消息框后,点击“确认”按钮,整个界面卡死了。串口日志停在lv_msgbox_create之后,没有任何错误信息。我让他把LV_USE_LOG打开,日志里赫然写着lv_msgbox_add_btn: invalid obj。问题出在哪?他用了lv_msgbox_add_btn之后,直接传了一个NULL回调函数。LVGL 的按钮事件处理机制,在回调为NULL时会尝试调用默认处理,但默认处理里又去访问了已经被删除的消息框对象——典型的野指针问题。这个案例让我决定把消息框的按钮与回调机制单独拿出来写一篇。很多初学者把消息框当成“弹个窗、点一下、关掉”这么简单,但实际项目中,消息框往往是用户交互的决策节点,按钮的回调处理直接决定了系统的稳定性。消息框的本质:一个带按钮的容器LVGL 的消息框(lv_msgbox_t)本质上是一个lv_obj_t容器,内部包含一个标题标签、一个内容标签,以及一个按钮矩阵(lv_btnmatrix_t)。当你调用lv_msgbox_create时,LVGL 自动帮你创建了这些子对象。理解这个结构很重要。因为当你操作消息框的按钮时,实际上是在操作一个按钮矩阵。这意味着按钮的索引