以下是 LVGL 8.2 版本中窗口部件(lv_win
)的 API 函数详解及用法说明,已严格适配该版本的特性:
核心 API 函数介绍
1. 创建窗口对象
lv_obj_t *lv_win_create(lv_obj_t *parent, const lv_coord_t header_height);
- 功能: 创建一个窗口对象,包含标题栏和内容区域。
- 参数:
parent
: 父容器(通常为lv_scr_act()
或其他容器)。header_height
: 标题栏高度(单位:像素)。
- 返回: 窗口对象的指针。
2. 添加标题
lv_obj_t *lv_win_add_title(lv_obj_t *win, const char *txt);
- 功能: 在窗口的标题栏中添加文本标题。
- 参数:
win
: 窗口对象指针。txt
: 标题文本。
- 返回: 标题标签对象的指针(可用于进一步样式调整)。
3. 添加控制按钮
lv_obj_t *lv_win_add_btn(lv_obj_t *win, const void *icon, lv_coord_t btn_w);
- 功能: 在标题栏右侧或左侧添加按钮(通常用于关闭、最小化等操作)。
- 参数:
win
: 窗口对象指针。icon
: 按钮图标(可使用LV_SYMBOL_CLOSE
等内置符号,或自定义图像路径)。btn_w
: 按钮宽度(若设为LV_SIZE_CONTENT
则自动适配图标大小)。
- 返回: 按钮对象的指针(需手动绑定事件回调)。
4. 获取内容区域
lv_obj_t *lv_win_get_content(lv_obj_t *win);
- 功能: 获取窗口的内容区域对象,用于向其中添加子部件(如标签、按钮等)。
- 参数:
win
: 窗口对象指针。
- 返回: 内容区域的容器对象指针。
典型用法示例
// 创建窗口(标题栏高度40像素)
lv_obj_t *win = lv_win_create(lv_scr_act(), 40);
lv_obj_set_size(win, 300, 200); // 设置初始大小
lv_obj_align(win, LV_ALIGN_CENTER, 0, 0);
// 添加标题
lv_win_add_title(win, "Settings");
// 添加关闭按钮(右侧)
lv_obj_t *close_btn = lv_win_add_btn(win, LV_SYMBOL_CLOSE, 30);
lv_obj_add_event_cb(close_btn, close_btn_event_handler, LV_EVENT_CLICKED, win); // 绑定点击事件
// 获取内容区域并添加控件
lv_obj_t *content = lv_win_get_content(win);
lv_obj_t *label = lv_label_create(content);
lv_label_set_text(label, "Window Content Area");
lv_obj_center(label);
注意事项
-
事件处理:
- 按钮需通过
lv_obj_add_event_cb
绑定事件(如LV_EVENT_CLICKED
),在回调函数中实现逻辑(如关闭窗口)。 - 关闭窗口示例回调:
void close_btn_event_handler(lv_event_t *e) { lv_obj_t *btn = lv_event_get_target(e); lv_obj_t *win = lv_event_get_user_data(e); lv_obj_del(win); // 销毁窗口 }
- 按钮需通过
-
布局管理:
- 内容区域默认无自动布局,需手动设置布局(如
lv_obj_set_flex_flow(content, LV_FLEX_FLOW_COLUMN)
)。
- 内容区域默认无自动布局,需手动设置布局(如
-
样式定制:
- 通过
lv_win_get_header(win)
获取标题栏对象,单独修改其样式。 - 使用
lv_style_set_xxx
调整窗口背景、边框等属性。
- 通过
版本适配说明
- LVGL 8.2 特性:窗口部件无内置的“最大化/最小化”功能,需手动实现。
- 与后续版本区别:LVGL 8.3+ 中部分 API 名称或参数可能变化(如
lv_win_add_button
更名为lv_win_add_btn_right
),请勿混淆。
通过上述 API 和示例,可高效创建和管理 LVGL 8.2 的窗口部件,确保代码兼容性。