【LVGL-窗口部件(lv_win_create)】

本文详细介绍了LVGL库中窗口部件的创建过程,包括设置大小、位置、边框,以及如何通过代码控制标题位置。还展示了如何添加按钮、响应事件和设置窗口内容,如滑块和图标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

■ LVGL-窗口部件(lv_win_create)

在这里插入图片描述
在这里插入图片描述

■ 示例一:设置大小,位子,边框

在这里插入图片描述
在这里插入图片描述

■ 示例二:代码顺序决定标题位置

在这里插入图片描述

在这里插入图片描述

■ 综合示例:

/**
 * @brief  按钮事件回调
 * @param  *e :事件相关参数的集合,它包含了该事件的所有数据
 * @return 无
 */
static void btn_event_cb(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e);                    /* 获取事件类型 */

    if(code == LV_EVENT_CLICKED)                                    /* 按钮按下 */
    {
        lv_obj_add_flag(win, LV_OBJ_FLAG_HIDDEN);                   /* 隐藏窗口 */
    }
}

/**
 * @brief  窗口实例
 * @param  无
 * @return 无
 */
static void lv_example_win(void)
{
    /* 根据屏幕宽度选择字体 */
    if (scr_act_width() <= 480)
    {
        font = &lv_font_montserrat_12;
    }
    else
    {
        font = &lv_font_montserrat_20;
    }

    /* 窗口整体 */
    win = lv_win_create(lv_scr_act(), scr_act_height()/12);                                     /* 创建窗口 */
    lv_obj_set_size(win, scr_act_width()* 5/8, scr_act_height()* 4/7);                          /* 设置大小 */
    lv_obj_center(win);                                                                         /* 设置位置 */
    lv_obj_set_style_border_width(win, 1, LV_STATE_DEFAULT);                                    /* 设置边框宽度 */
    lv_obj_set_style_border_color(win, lv_color_hex(0x8a8a8a), LV_STATE_DEFAULT);               /* 设置边框颜色 */
    lv_obj_set_style_border_opa(win, 100, LV_STATE_DEFAULT);                                    /* 设置边框透明度 */
    lv_obj_set_style_radius(win, 10, LV_STATE_DEFAULT);                                         /* 设置圆角 */

    /*************************   第一部分:头部   ****************************/

    /* 左侧按钮 */
    lv_obj_t *btn_setting = lv_win_add_btn(win, LV_SYMBOL_SETTINGS,30);                         /* 添加按钮 */
    lv_obj_set_style_bg_opa(btn_setting, 0, LV_STATE_DEFAULT);                                  /* 设置背景透明度 */
    lv_obj_set_style_shadow_width(btn_setting, 0, LV_STATE_DEFAULT);                            /* 设置阴影宽度 */
    lv_obj_set_style_text_color(btn_setting, lv_color_hex(0x000000), LV_STATE_DEFAULT);         /* 设置文本颜色 */

    /* 标题 */
    lv_obj_t *title = lv_win_add_title(win, "Setting");                                         /* 添加标题 */
    lv_obj_set_style_text_font(title, font, LV_STATE_DEFAULT);                                  /* 设置字体 */

    /* 右侧按钮 */
    lv_obj_t *btn_close = lv_win_add_btn(win, LV_SYMBOL_CLOSE,30);                              /* 添加按钮 */
    lv_obj_set_style_bg_opa(btn_close, 0, LV_STATE_DEFAULT);                                    /* 设置背景透明度 */
    lv_obj_set_style_shadow_width(btn_close, 0, LV_STATE_DEFAULT);                              /* 设置阴影宽度 */
    lv_obj_set_style_text_color(btn_close, lv_color_hex(0x000000), LV_STATE_DEFAULT);           /* 设置文本颜色(未按下) */
    lv_obj_set_style_text_color(btn_close, lv_color_hex(0xff0000), LV_STATE_PRESSED);           /* 设置文本颜色(已按下) */
    lv_obj_add_event_cb(btn_close, btn_event_cb, LV_EVENT_CLICKED, NULL);                       /* 添加事件 */

    /*************************   第二部分:主体   ****************************/

    /* 主体背景 */
    lv_obj_t *content = lv_win_get_content(win);                                                /* 获取主体 */
    lv_obj_set_style_bg_color(content, lv_color_hex(0xffffff),LV_STATE_DEFAULT);                /* 设置背景颜色 */

    /* 音乐音量滑块 */
    lv_obj_t *slider_audio = lv_slider_create(content);                                         /* 创建滑块 */
    lv_obj_set_size(slider_audio, scr_act_width()/3, scr_act_height()/30);                      /* 设置大小 */
    lv_obj_align(slider_audio, LV_ALIGN_CENTER, 15, -scr_act_height()/14);                      /* 设置位置 */
    lv_slider_set_value(slider_audio, 50, LV_ANIM_OFF);                                         /* 设置当前值 */
    lv_obj_set_style_bg_color(slider_audio, lv_color_hex(0x787c78), LV_PART_MAIN);              /* 设置主体颜色 */
    lv_obj_set_style_bg_color(slider_audio, lv_color_hex(0xc3c3c3), LV_PART_INDICATOR);         /* 设置指示器颜色 */
    lv_obj_remove_style(slider_audio, NULL, LV_PART_KNOB);                                      /* 移除旋钮 */

    /* 音乐音量图标 */
    lv_obj_t *label_audio = lv_label_create(content);                                           /* 创建音量标签 */
    lv_label_set_text(label_audio, LV_SYMBOL_AUDIO);                                            /* 设置文本内容:音乐图标 */
    lv_obj_set_style_text_font(label_audio, font, LV_STATE_DEFAULT);                            /* 设置字体 */
    lv_obj_align_to(label_audio, slider_audio, LV_ALIGN_OUT_LEFT_MID, -scr_act_width()/40, 0);  /* 设置位置 */

    /* 闹钟音量滑块 */
    lv_obj_t *slider_bell = lv_slider_create(content);                                          /* 创建滑块 */
    lv_obj_set_size(slider_bell, scr_act_width()/3, scr_act_height()/30);                       /* 设置大小 */
    lv_obj_align(slider_bell, LV_ALIGN_CENTER, 15, scr_act_height()/14);                        /* 设置位置 */
    lv_slider_set_value(slider_bell, 50, LV_ANIM_OFF);                                          /* 设置当前值 */
    lv_obj_set_style_bg_color(slider_bell, lv_color_hex(0x787c78), LV_PART_MAIN);               /* 设置主体颜色 */
    lv_obj_set_style_bg_color(slider_bell, lv_color_hex(0xc3c3c3), LV_PART_INDICATOR);          /* 设置指示器颜色 */
    lv_obj_remove_style(slider_bell, NULL, LV_PART_KNOB);                                       /* 移除旋钮 */

    /* 闹钟音量图标 */
    lv_obj_t *label_bell = lv_label_create(content);                                            /* 创建音量标签 */
    lv_label_set_text(label_bell, LV_SYMBOL_BELL);                                              /* 设置文本内容:闹钟图标 */
    lv_obj_set_style_text_font(label_bell, font, LV_STATE_DEFAULT);                             /* 设置字体 */
    lv_obj_align_to(label_bell, slider_bell, LV_ALIGN_OUT_LEFT_MID, -scr_act_width()/40, 0);    /* 设置位置 */
}

在这里插入图片描述

<think>嗯,用户想在LVGL中修改窗口部件头部的背景颜色。我需要仔细想想怎么做。首先,根据提供的引用内容,特别是引用[1]提到的,LVGL部件由不同部分组成,比如背景弧、前景弧、旋钮等。而窗口的头部可能属于标题栏部分。 根据引用[2],窗口的标题栏的样式可能涉及到header的padding设置,控制按钮的高度也与之相关。所以可能需要修改标题栏部分的样式。在LVGL中,通常使用样式对象来设置不同部分的属性,比如背景颜色。 用户需要更改的是头部的背景颜色,可能需要定位到窗口的标题部分。LVGL中,窗口的标题栏可能属于LV_PART_HEADER这个部分。因此,正确的做法应该是创建一个样式,设置该部分的背景颜色,然后将其添加到窗口的标题部分。 另外,参考引用[3],组件的样式可能需要在初始化时或者在创建窗口后进行设置。可能需要使用lv_obj_add_style函数,并指定LV_PART_HEADER作为目标部分。这样,新样式会应用在窗口的头部,覆盖默认颜色。 需要注意的是,LVGL的版本可能影响样式的使用方式。如果用户使用的是较新的版本(如v8或更高),样式系统的部分名称可能有所变化,但LV_PART_HEADER应该仍然适用。此外,确保在设置样式时,正确使用状态,比如LV_STATE_DEFAULT,以确保在默认状态下应用颜色。 总结步骤应该是:创建样式对象,设置背景颜色,将样式添加到窗口的标题部分。可能还需要检查是否有其他样式覆盖了该设置,或者是否需要在初始化窗口后立即应用样式。</think>在LVGL中修改窗口部件头部背景颜色,需要通过样式系统对`LV_PART_HEADER`部分进行定制。具体操作步骤如下: 1. **创建样式对象** ```c static lv_style_t header_style; lv_style_init(&header_style); lv_style_set_bg_color(&header_style, lv_color_hex(0xFF0000)); // 设置为红色 lv_style_set_bg_opa(&header_style, LV_OPA_COVER); // 设置不透明度 ``` 2. **应用样式到窗口** ```c lv_obj_t * win = lv_win_create(lv_scr_act(), 40); lv_win_add_title(win, "My Window"); lv_obj_add_style(win, &header_style, LV_PART_HEADER); // 关键参数LV_PART_HEADER ``` **技术细节说明**: - 窗口标题栏高度由`style_header`的padding值决定[^2] - 颜色修改仅影响`LV_PART_HEADER`部分,不影响主体(LV_PART_MAIN)和其他控件[^1] - 建议在组件初始化后立即应用样式以保证兼容性[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光芒Shine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值