Hi,大家好,欢迎来到树莓派之littlevGL课堂,我们在上节课中学习了如何搭建开发环境,相信聪明的你一定搭建好了,肯定急于学习新的知识,不过不要着急,本节教程教大家去了解一下基本的知识---对象的基本属性,理解好了本节课程,后面的课程才能理解的更加深入,废话不多说! 一 对象的基本属性 littlevGL 6.0 目前共有三十多种对象类型,本节教程我们来学习littlevGL最基本的一种对象类型--基本对象(lv_obj),这是三十多种对象类型中最基本的对象类型,其他的对象类型都是基于基本对象派生出来的,那么我们就来先来学习一下基本对象吧。 想知道基本对象有哪些属性,我们可以通过它的结构体去了解一下: 01 | typedef struct _lv_obj_t |
03 | struct _lv_obj_t * par; |
08 | lv_event_cb_t event_cb; |
09 | lv_signal_cb_t signal_cb; |
10 | lv_design_cb_t design_cb; |
13 | const lv_style_t * style_p; |
19 | #if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY |
20 | uint8_t ext_click_pad_hor; |
21 | uint8_t ext_click_pad_ver; |
24 | #if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL |
25 | lv_area_t ext_click_pad; |
31 | uint8_t drag_throw : 1; |
32 | uint8_t drag_parent : 1; |
35 | uint8_t opa_scale_en : 1; |
36 | uint8_t parent_event : 1; |
37 | lv_drag_dir_t drag_dir : 2; |
43 | lv_coord_t ext_draw_pad; |
50 | lv_obj_user_data_t user_data; |
我们可以看到这个结构体代码还是有一点多的,不过不要紧,本节教程我们只需要了解一个大概就可以,刚开始学习没必要研究的太深入,如果太关注底层的实现有时候反而会适得其反,如果你后面熟练的掌握了littlevGL的所有控件后,可以反过头来详细的去看一下具体的实现方式,以及作者的编程思维,当然这些都是后话。 二 对象的基本属性介绍 我们通过代码来看一下,其实注释也已经非常清晰的指出有哪些基本的属性了: 01 | struct _lv_obj_t * par; |
06 | lv_event_cb_t event_cb; |
07 | lv_signal_cb_t signal_cb; |
08 | lv_design_cb_t design_cb; |
11 | const lv_style_t * style_p; |
我们本节教程先只看上面的这些属性。 1.父对象(struct _lv_obj_t * par): 首先它有一个父对象,那么父对象是什么呢?我们可以简单理解为当前对象是在哪一个窗口之内生成的,或者是基于哪一个对象派生的。 2.子对象(lv_ll_t child_ll): 然后它还有一个指向子对象的链表,其他对象可以是此对象的子对象,依次类推,当当前对象销毁时,会通过此链表依次销毁子对象、子对象的子对象等等。 3.坐标(lv_area_t coords): 然后就是坐标属性,包括在屏幕中的位置以及用来约束对象大小的高度和宽度。 对象的大小可以通过 lv_obj_set_width(obj, new_width) 和lv_obj_set_height(obj, new_height) 或单一函数 lv_obj_set_size(obj, new_width, new_height)来修改。 对象的坐标可以通过lv_obj_set_x(obj, new_x) 和 lv_obj_set_y(obj, new_y) 或单一函数lv_obj_set_pos(obj, new_x, new_y)来设置。 对象的位置我们还可以通过去其他对象的对齐方式去设定,这里给出一张图可以帮助大家更好的理解各种对齐方式: 4.事件(lv_event_cb_t event_cb): 我们可以给对象设置一个事件回调,比如点击事件,拖拽事件,然后触发我们想要的结果。 我们可以通过此方式设置对象的事件回调: lv_obj_set_event_cb(obj, event_cb) 我们只需要在回调函数中去完成我们的逻辑处理即可。具体都有哪些事件我们会在用到的时候再做详细说明,或者可以去查看一下lv_event_t都有哪些枚举类型。 5.信号(lv_signal_cb_t signal_cb): 其实信号相对来说与用户是不相关的,因为这一属性仅在库内部使用,所以这里我们也不再详细去讲解了。 6.设计(lv_design_cb_t design_cb): 这个属性目前基本用不到,此属性主要用于绘制对象或者遮罩图像。 7.扩展属性(void * ext_attr): 我们可以通过此属性来给对象扩展一些属性,当我们觉得库中某些对象的功能不足,或者我们需要新增某些特殊的属性,我们都是可以设置的,就比如按钮对象相比于基本对象的不同,就是扩展的一些属性,可以看出littlevGL的对象属性是非常灵活。 cpp代码:2 | lv_btn_ext_t * ext = lv_obj_allocate_ext_attr(new_btn, sizeof (lv_btn_ext_t)); |
8.样式(const lv_style_t * style_p):样式属性决定了我们创建的对象的外观形象,但是样式又相对来说是比较麻烦的,因为我们描绘一个对象的外观的维度是非常多的,比如我们可以设置对象的背景,文本样式,填充样式,线条样式等等,不过我们刚开始学习自带的控件样式就足够我们使用了,所以不需要担心这一点。
这就是基本对象的一些基本属性,当然还一部分没有讲到,当前我们只需要了解这么多就足够了,了解了这些基本属性可以帮助我们更好的去理解某些控件的属性,本节就到这里,下一节我们学习如何创建一个基本对象。
 |