Hi,大家好,欢迎来到STM32之littlevGL课堂,我们在上节课中学习了矩阵按钮控件(lv_btnm),本节课带大家来学习一下日历控件,废话不多说,先看图! 一有图有真相 想不想做一个像上面一样的日历呢?不要觉得可以随意的切换月份很复杂,这一切你都不需要关心,因为littlevGL已经帮你做好一切了,你需要做的就是创建一个日历控件,然后设置一下日期就可以,当然你也可以做一个电子日历,时时校准并更新日期,后面再随着我们学习的深入可以再加上时间的显示,这样电子日历就更加完善了,不过这一切都需要你一步一步的跟着教程好好学习。 二代码分析 static void calender_event_handler(lv_obj_t * obj, lv_event_t event) { if(event == LV_EVENT_CLICKED) { lv_calendar_date_t * date = lv_calendar_get_pressed_date(obj); if(date) { lv_calendar_set_today_date(obj, date); } } } static void calendar_test(void) { lv_obj_t * calendar = lv_calendar_create(lv_scr_act(), NULL); lv_obj_set_size(calendar, 460, 460); lv_obj_align(calendar, NULL, LV_ALIGN_CENTER, 0, 0); lv_obj_set_event_cb(calendar, calender_event_handler); /*Set the today*/ lv_calendar_date_t today; today.year = 2020; today.month = 3; today.day = 18; lv_calendar_set_today_date(calendar, &today); lv_calendar_set_showed_date(calendar, &today); /*Highlight some days*/ static lv_calendar_date_t highlihted_days[1]; /*Only it's pointer will be saved so should be static*/ highlihted_days[0].year = 2020; highlihted_days[0].month = 3; highlihted_days[0].day = 28; lv_calendar_set_highlighted_dates(calendar, highlihted_days, 1); } 这个结构体也是相对来说非常简单的,就三个结构体成员分别是年份、月份和日期,我们可以通过这个结构体去设置我们要特殊设置的某一天具体的日期。 然后我们再看一下上面说的三个函数的原型: void lv_calendar_set_today_date(lv_obj_t * calendar, lv_calendar_date_t * today); void lv_calendar_set_showed_date(lv_obj_t * calendar, lv_calendar_date_t * showed); void lv_calendar_set_highlighted_dates(lv_obj_t * calendar, lv_calendar_date_t * highlighted, uint16_t date_num); lv_calendar_set_today_date就是设置当前日期,说白了就是今天是那一天,然后lv_calendar_set_showed_date这个是要显示的日期,假如我们不设置要显示的日期,会默认从2018年1月份开始显示。然后lv_calendar_set_highlighted_dates是将某一天的日期高亮,就跟我们平常看日历节假日都会高亮一样,大家可以更换上面的日期进行测试,相对来说这个控件的使用还是非常简单的,大家有没有学会呢? OK,这就是本节课我们要学习的内容了,下一节课我们学习复选框控件,大家对复选框有哪些了解呢?我们下一节课见! |