LVGL- 基础对象(lv_obj_t
■ LVGL-border-box 模型
属性 | 描述 |
---|---|
边界(bounding) | 元素的宽度/高度围起来的区域(整个盒子)。 |
边框(border) | 边框有大小和颜色等属性(相当于盒子的厚度和它的颜色)。 |
填充(padding) | 对象两侧与其子对象之间的空间(盒子的填充物)。 |
内容(content) | 如果边界框按边框宽度和填充的大小缩小,则显示其大小的内容区域(盒子实际装东西的区域)。 |
轮廓(outline) | LVGL中没有外边距(margin)的概念(盒子之间的距离),确认代之的是轮廓(outline)。 它是绘制于元素(盒子)周围的一条线,它不占据空间,位于边框边缘的外围,可起到突出元素(盒子)的作用。 在浏览器里,当鼠标点击或使用Tab键让一个选项或者一个图片获得焦点的时候,这个元素就会多了一个轮廓框围绕。轮廓(outline) |
LVGL的盒子模型是我们理解对象(部件)的组成,修改对象的样式,实现对对象的布局、处理对象排列等等的关键。
盒子模型模型实例对比
/******************/
lv_obj_t* obj1 = lv_line_create(ui_ContainerRight);
static lv_point_t line_points[] = { {50, 50}, {150, 50} };
lv_line_set_points(obj1, line_points, sizeof(line_points) / sizeof(lv_point_t));
/******************/
lv_obj_t* obj2 = lv_obj_create(ui_ContainerRight);
lv_obj_set_pos(obj2,50,70);
lv_obj_set_width(obj2, 100);
lv_obj_set_height(obj2, 50);
lv_obj_set_style_line_color(obj2, lv_color_black(), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_line_width(obj2, 10, LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_line_opa(obj2, 255 ,LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_line_rounded(obj2, 255 ,LV_PART_MAIN | LV_STATE_DEFAULT );
/******************/
lv_obj_t* obj3 = lv_obj_create(ui_ContainerRight);
lv_obj_set_pos(obj3,50,130);
lv_obj_set_width(obj3, 100);
lv_obj_set_height(obj3, 50);
lv_obj_set_style_border_color(obj3, lv_color_black(), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_width(obj3, 10, LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_border_opa(obj3, 255 ,LV_PART_MAIN | LV_STATE_DEFAULT );
/******************/
lv_obj_t* obj4 = lv_obj_create(ui_ContainerRight);
lv_obj_set_pos(obj4,50,200);
lv_obj_set_width(obj4, 100);
lv_obj_set_height(obj4, 50);
lv_obj_set_style_outline_color(obj4, lv_color_black(), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_outline_width(obj4, 10, LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_outline_opa(obj4, 255 ,LV_PART_MAIN | LV_STATE_DEFAULT );
/******************/
lv_obj_t* obj5 = lv_obj_create(ui_ContainerRight);
lv_obj_set_pos(obj5,50,270);
lv_obj_set_width(obj5, 100);
lv_obj_set_height(obj5, 50);
lv_obj_set_style_arc_color(obj5, lv_color_black(), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_arc_width(obj5, 10, LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_arc_opa(obj5, 255 ,LV_PART_MAIN | LV_STATE_DEFAULT );
显示结果:
边框 宽度
lv_obj_set_style_border_width(pppppppp2, 10, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_t *pppppppp = lv_label_create(ui_EBKV_Containe_Body);
lv_obj_set_pos(pppppppp,100,100);
lv_obj_set_size(pppppppp, 130, 60);
lv_label_set_text(pppppppp, "book 1");
lv_obj_set_style_text_color(pppppppp, lv_color_hex(0x00), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_opa(pppppppp, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(pppppppp, &lv_font_montserrat_22, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(pppppppp, lv_color_hex(0x4ea7d1), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(pppppppp, 255, LV_PART_MAIN | LV_STATE_DEFAULT); //加上这句上面有效果
lv_obj_set_style_border_color(pppppppp, lv_color_hex(0x00), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_width(pppppppp, 2, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_opa(pppppppp, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_t *pppppppp2 = lv_label_create(ui_EBKV_Containe_Body);
lv_obj_set_pos(pppppppp2,100,170);
lv_obj_set_size(pppppppp2, 130, 60);
lv_label_set_text(pppppppp2, "book 2");
lv_obj_set_style_text_color(pppppppp2, lv_color_hex(0x00), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_opa(pppppppp2, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(pppppppp2, &lv_font_montserrat_22, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(pppppppp2, lv_color_hex(0x4ea7d1), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(pppppppp2, 255, LV_PART_MAIN | LV_STATE_DEFAULT); //加上这句上面有效果
lv_obj_set_style_border_color(pppppppp2, lv_color_hex(0x00), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_width(pppppppp2, 10, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_opa(pppppppp2, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
pad设置宽度
lv_obj_set_style_pad_top(pppppppp, 10, LV_PART_MAIN);
lv_obj_set_style_pad_left(pppppppp, 10, LV_PART_MAIN);
lv_obj_set_style_pad_all(pppppppp, 10, LV_PART_MAIN);
int fontHeight1 = lv_font_get_line_height(&lv_font_montserrat_22);
int verPad2 = (60 - fontHeight1)/2;
lv_obj_set_style_pad_top(pppppppp, verPad2, 0);
int textWidth1 = lv_txt_get_width("book 1", strlen("book 1"), &lv_font_montserrat_22, 1,LV_TEXT_FLAG_NONE);
int horPad1 = (130 - textWidth1)/2;
lv_obj_set_style_pad_left(pppppppp, horPad1, 0);
lv_obj_set_style_pad_all(pppppppp, 10, LV_PART_MAIN);
文本居中
lv_obj_set_style_pad_top(pppppppp, verPad2, 0);
lv_obj_set_style_pad_left(pppppppp, horPad1, 0);
lv_obj_t *pppppppp = lv_label_create(ui_EBKV_Containe_Body);
lv_obj_set_pos(pppppppp,100,100);
lv_obj_set_size(pppppppp, 130, 60);
lv_label_set_text(pppppppp, "book 1");
lv_obj_set_style_text_color(pppppppp, lv_color_hex(0x00), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_opa(pppppppp, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(pppppppp, &lv_font_montserrat_22, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(pppppppp, lv_color_hex(0x4ea7d1), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(pppppppp, 255, LV_PART_MAIN | LV_STATE_DEFAULT); //加上这句上面有效果
lv_obj_set_style_border_color(pppppppp, lv_color_hex(0x00), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_width(pppppppp, 2, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_opa(pppppppp, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
int fontHeight1 = lv_font_get_line_height(&lv_font_montserrat_22);
int verPad2 = (60 - fontHeight1)/2;
lv_obj_set_style_pad_top(pppppppp, verPad2, 0);
int textWidth1 = lv_txt_get_width("book 1", strlen("book 1"), &lv_font_montserrat_22, 1,LV_TEXT_FLAG_NONE);
int horPad1 = (130 - textWidth1)/2;
lv_obj_set_style_pad_left(pppppppp, horPad1, 0);
lv_obj_t *pppppppp2 = lv_label_create(ui_EBKV_Containe_Body);
lv_obj_set_pos(pppppppp2,100,170);
lv_obj_set_size(pppppppp2, 130, 60);
lv_label_set_text(pppppppp2, "book 2");
lv_obj_set_style_text_color(pppppppp2, lv_color_hex(0x00), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_opa(pppppppp2, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(pppppppp2, &lv_font_montserrat_22, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(pppppppp2, lv_color_hex(0x4ea7d1), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(pppppppp2, 255, LV_PART_MAIN | LV_STATE_DEFAULT); //加上这句上面有效果
lv_obj_set_style_border_color(pppppppp2, lv_color_hex(0x00), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_width(pppppppp2, 2, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_opa(pppppppp2, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
■ LVGL-基础对象(lv_obj_t)就是一个矩形
示例一:
在这里插入代码片
■ LVGL-(lv_obj_t)基本属性
■ LVGL-(lv_obj_t)大小
//大小
lv_obj_set_width(obj, 200);
lv_obj_set_width(btn, lv_pct(50)) //lv_pct(value) 将值转换为百分比
lv_obj_set_width(btn, LV_SIZE_CONTENT) //设置对象的宽度/高度以涉及所有子项的特殊值
lv_obj_set_height(obj, 100);
lv_obj_set_height(obj, lv_pct(100)); //百分比值是根据父内容区域的大小计算的。例如将对象的高度设置为屏幕高度:
lv_obj_set_size(obj, 200, 100); //Or in one function
lv_obj_update_layout(obj) //如果您需要获取对象的任何坐标并且坐标刚刚更改,则需要强制 LVGL 重新计算坐标。
scr_act_width() //获取宽度
scr_act_height() //获取高度
lv_obj_get_width(obj) //获取宽度
lv_obj_get_height(obj) //获取高度
lv_obj_update_layout(obj_left); /* 手动更新物体的参数 */
■ LVGL-(lv_obj_t)位置
//位置
lv_obj_set_x(obj, 10);
lv_obj_set_y(obj, 20);
lv_obj_set_pos(obj, 10, 20); //Or in one function
■ LVGL-(lv_obj_t)对齐
//对齐
lv_obj_set_align(obj, align); //lv_obj_set_align(obj, align);
lv_obj_align(obj, align, x, y); //更改对齐方式并设置新坐标:
示例一:右对齐
对齐问题 点 没有完全重合
lv_obj_t *parent = lv_obj_create(lv_scr_act());
lv_obj_set_size(parent,100,100);
lv_obj_set_style_bg_color(parent,lv_palette_main(LV_PALETTE_BLUE),0);
lv_obj_align(parent,LV_ALIGN_CENTER,0,0);
lv_obj_t *child = lv_obj_create(lv_scr_act());
lv_obj_set_size(child,50,50);
lv_obj_set_style_bg_color(child,lv_palette_main(LV_PALETTE_GREEN),0);
lv_obj_align_to(child,parent,LV_ALIGN_BOTTOM_MID,0,0);
没有完全对齐问题
==添加 lv_obj_set_style_pad_all(parent,0,0); == 后的效果
■ LVGL-(lv_obj_t)样式
■ 设置样式函数
设置颜色后一定要设置_bg_opa 才起效
lv_obj_set_style_bg_color(ui_ContainerBody, lv_color_hex(0x73C3EE), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(ui_ContainerBody, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_align_to(ui_ContainerBody,ui_Title,LV_ALIGN_OUT_BOTTOM_MID,0,0);
■ 设置样式枚举
■ 设置样式(大小,位置,背景,轮廓,边框,阴影,其他)
void lv_style_set_bg_color(lv_style_t * style, lv_color_t value); //设置背景颜色
void lv_style_set_bg_color_filtered(lv_style_t * style, lv_color_t value); //设置背景过滤颜色
void lv_style_set_bg_opa(lv_style_t * style, lv_opa_t value); //设置背景透明度
void lv_style_set_bg_grad_color(lv_style_t * style, lv_color_t value); //设置背景下半部颜色
void lv_style_set_bg_grad_color_filtered(lv_style_t * style, lv_color_t value);//设置背景下半部过滤颜色
void lv_style_set_bg_grad_dir(lv_style_t * style, lv_grad_dir_t value); //设置背景下半部颜色填充方向
void lv_style_set_bg_main_stop(lv_style_t * style, lv_coord_t value); //主色停止
void lv_style_set_bg_grad_stop(lv_style_t * style, lv_coord_t value); //下半部色停止
void lv_style_set_bg_img_src(lv_style_t * style, const void * value); //设置背景图片
void lv_style_set_bg_img_opa(lv_style_t * style, lv_opa_t value); //设置背景图片透明度
void lv_style_set_bg_img_recolor(lv_style_t * style, lv_color_t value); //设置背景图片重着色
void lv_style_set_bg_img_recolor_filtered(lv_style_t * style, lv_color_t value);//设置背景图片重着色过滤色
void lv_style_set_bg_img_recolor_opa(lv_style_t * style, lv_opa_t value); //设置背景图片重着色透明度
void lv_style_set_bg_img_tiled(lv_style_t * style, bool value); //设置背景图片平铺
static inline void lv_style_set_pad_all(lv_style_t * style, lv_coord_t value); //四边内边距
static inline void lv_style_set_pad_hor(lv_style_t * style, lv_coord_t value); //水平内边距 左右相同
static inline void lv_style_set_pad_ver(lv_style_t * style, lv_coord_t value); //竖直内边距 上下相同
static inline void lv_style_set_pad_gap(lv_style_t * style, lv_coord_t value); //差距内边距 行列相同
lv_obj_set_style_pad_left(ui_LabelLine3_2, 10, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_right(ui_LabelLine3_2, 10, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_top(ui_LabelLine3_2, 10, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_bottom(ui_LabelLine3_2, 10, LV_PART_MAIN | LV_STATE_DEFAULT);
void lv_style_set_border_color(lv_style_t * style, lv_color_t value); //设置样式边框颜色
void lv_style_set_border_color_filtered(lv_style_t * style, lv_color_t value); //设置样式边框过滤颜色
void lv_style_set_border_opa(lv_style_t * style, lv_opa_t value); //设置样式边框透明度
void lv_style_set_border_width(lv_style_t * style, lv_coord_t value); //设置样式边框宽度
void lv_style_set_border_side(lv_style_t * style, lv_border_side_t value); //设置样式边框显示范围
void lv_style_set_border_post(lv_style_t * style, bool value); //设置样式边框柱
LV_BORDER_SIDE_NONE //无边框
LV_BORDER_SIDE_BOTTOM //底部边框
LV_BORDER_SIDE_TOP //顶部边框
LV_BORDER_SIDE_LEFT //左边边框
LV_BORDER_SIDE_RIGHT //右边边框
LV_BORDER_SIDE_FULL //四周边框
LV_BORDER_SIDE_INTERNAL //边境一侧内部
lv_style_set_radius(&style, 5);
lv_style_set_bg_opa(&style, LV_OPA_COVER);
lv_style_set_bg_color(&style, lv_palette_lighten(LV_PALETTE_GREY, 3));
lv_style_set_border_width(&style, 2);
lv_style_set_border_color(&style, lv_palette_main(LV_PALETTE_BLUE));
实例一 outline
static lv_style_t style; //创建style
lv_style_init(&style); //初始化style
lv_style_set_radius(&style,5); //设置样式的圆角
lv_style_set_opa(&style,LV_OPA_COVER); //设置样式背景透明度
lv_style_set_bg_color(&style,lv_palette_lighten(LV_PALETTE_GREY,1)); //设置样式背景颜色
lv_style_set_outline_width(&style,2); //设置样式轮廓的宽度
lv_style_set_outline_color(&style,lv_palette_main(LV_PALETTE_BLUE)); //设置样式轮廓颜色
lv_style_set_outline_pad(&style,5); //设置样式轮廓的边距
lv_obj_t * obj = lv_obj_create(lv_scr_act()); //创建对象
lv_obj_add_style(obj,&style, 0); //将样式添加到对象中
lv_obj_center(obj); //居中对象
显示结果;
实例二 border
static lv_style_t style; //创建style
lv_style_init(&style); //初始化style
lv_style_set_radius(&style,5); //设置样式的圆角
lv_style_set_opa(&style,LV_OPA_50); //设置样式背景透明度
lv_style_set_bg_color(&style,lv_palette_lighten(LV_PALETTE_BLUE_GREY,1)); //设置样式背景颜色
lv_style_set_border_color(&style,lv_palette_main(LV_PALETTE_BLUE)); //设置样式边框颜色
lv_style_set_border_width(&style,5); //设置样式边框宽度
lv_style_set_border_opa(&style,LV_OPA_30); //设置样式边框透明度
lv_style_set_border_side(&style,LV_BORDER_SIDE_FULL); //设置样式边框显示范围
lv_obj_t * obj = lv_obj_create(lv_scr_act()); //创建对象
lv_obj_add_style(obj,&style, 0); //将样式添加到对象中
lv_obj_center(obj); //居中对象
实例三 border左上下右边框
lv_obj_set_style_radius(ui_ImageBig,10,LV_PART_MAIN);
lv_obj_set_style_border_color(ui_ImageBig, lv_color_white(), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_width(ui_ImageBig, 2, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_opa(ui_ImageBig, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_side(ui_ImageBig,LV_BORDER_SIDE_BOTTOM | LV_BORDER_SIDE_TOP | LV_BORDER_SIDE_LEFT,LV_PART_MAIN | LV_STATE_DEFAULT);
实例四 实现圆角功能
lv_obj_t* ui_main = lv_obj_create(lv_scr_act());
lv_obj_remove_style_all(ui_main);
lv_obj_set_size(ui_main, 400, 400);
lv_obj_set_style_bg_color(ui_main, lv_color_hex(0xdc7878), LV_PART_MAIN);
lv_obj_set_style_bg_opa(ui_main, 255, LV_PART_MAIN);
lv_obj_set_style_radius(ui_main, 12, LV_PART_MAIN);
lv_obj_set_y(ui_main, 76);
lv_obj_center(ui_main);
lv_obj_t* ui_radius = lv_obj_create(ui_main); // 矩形
lv_obj_remove_style_all(ui_radius);
lv_obj_set_size(ui_radius, 400, 12);
lv_obj_set_style_bg_color(ui_radius, lv_color_hex(0xdc7878), LV_PART_MAIN);
lv_obj_set_style_bg_opa(ui_radius, 255, LV_PART_MAIN);
lv_obj_set_align(ui_radius, LV_ALIGN_BOTTOM_LEFT);
■ 设置控件子控件样式
知识点一:要单独设置某个控件的样式怎么区分呢? LVGL 为每个控件都有定义某个部分
知识点二:这里可以查询每个控件对应的枚举值。
示例一:设置控件两个子控件两个枚举的背景色
结果:指示器手柄和滑块都设置为绿色
示例二:使用样式设置对象大小
使用样式设置对象大小的示例:
static lv_style_t style;
lv_style_init(&style);
lv_style_set_width(&style, 100);
lv_obj_t * btn = lv_btn_create(lv_scr_act());
lv_obj_add_style(btn, &style, LV_PART_MAIN);
■ LVGL-(lv_obj_t)事件
■ 点击事件
■ 一个obj添加多个事回调函数
static void scr_event_handle(lv_event_t* e){
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t *target = lv_event_get_target(e);
char *cur_ssid = NULL;
printf("shine 12 %s,%d,code = %d\n", __func__, __LINE__, code);
if (code == LV_EVENT_SCREEN_LOADED) {
}
}
static void mainpage_scr_event_handle(lv_event_t *e){
lv_event_code_t code = lv_event_get_code(e);
printf("shine 13 %s,%d,code = %d\n", __func__, __LINE__, code);
if(code == LV_EVENT_SCREEN_LOADED){
projector_set_some_sys_param(P_CUR_CHANNEL, SCREEN_CHANNEL_MAIN_PAGE);
lv_group_set_default(main_page_g);
}else if(code == LV_EVENT_SCREEN_UNLOADED){
win_msgbox_msg_close();
}
}
lv_obj_add_event_cb(main_page_scr, scr_event_handle, LV_EVENT_ALL, 0);
lv_obj_add_event_cb(main_page_scr, mainpage_scr_event_handle, LV_EVENT_ALL, 0);
■ 多个对象可以使用一个回调函数
多个对象可以使用一个回调函数
void my_event_cb(lv_obj_t * obj, lv_event_t event)
{
switch(event){
case LV_EVENT_PRESSED: /* 对象被按下 */
printf("Pressed\n");
break;
case LV_EVENT_SHORT_CLICKED: /* 对象被短点击 */
printf("Short clicked\n");
break;
case LV_EVENT_CLICKED: /* 对象被点击 */
printf("Clicked\n");
break;
}
}
/* 指定一个事件回调函数 */
lv_obj_t * btn = lv_btn_create(lv_scr_act(), NULL);
lv_obj_set_event_cb(btn, my_event_cb);
■ 不同的事件类型共用一个事件回调函数
■ 事件回调中使用lv_event_cb()函数区分不同对象的事件
■ LVGL-区域边界设置
lv_obj_set_ext_click_area(lv_obj_t * obj, lv_coord_t size) | 用户必须要在区域边界内点击对象,这样才能成功触发事件
■ LVGL-父和子对象的关系
示例一:switch2 在switch1里面。
■ LVGL-基础对象API 函数
| 属性 | 描述 |
函数 | 描述 |
---|---|
lv_obj_create () | 创建基础对象(矩形) |
lv_obj_set_user_data() | 设置对象的 user_data 字段 |
lv_obj_has_flag() | 检查是否在对象上设置了指定的标志 |
lv_obj_has_flag_any() | 检查是否在对象上设置了任何标志 |
lv_obj_get_state() | 获取对象的状态 |
lv_obj_has_state() | 检查对象是否处于指定状态 |
lv_obj_get_group() | 获取对象的组 |
lv_obj_get_user_data() | 获取对象的用户数据 |
lv_obj_allocate_spec_attr() | 为对象分配特殊数据(还未分配时) |
lv_obj_check_type() | 检查 obj 的类型 |
lv_obj_has_class() | 检查是否有任何对象具有指定的类 |
lv_obj_get_class() | 获取对象的类 |
lv_obj_is_valid() | 检查是否有任何对象在活动 |
lv_obj_set_ext_click_area(lv_obj_t * obj, lv_coord_t size) | 用户必须要在区域边界内点击对象,这样才能成功触发事件 |