添加例程
右键将把相应的文件,添加到对应的工程目录中
将menu_test_demo.c文件修改为如下
/*********************
* INCLUDES
*********************/
#include "../../lv_100ask_teach_demos.h"
#if LV_USE_MENU_TEST_DEMO
#include "menu_test_demo.h"
/*********************
* DEFINES
*********************/
/**********************
* STATIC VARIABLES
**********************/
void MENU_TEST_GUI_APP(void)
{
}
#endif /* LV_USE_MENU_TEST_DEMO */
将menu_test_demo.h文件修改为如下
#ifndef MENU_TEST_DEMO_H
#define MENU_TEST_DEMO_H
#ifdef __cplusplus
extern "C" {
#endif
/*********************
* INCLUDES
*********************/
#include "../lv_100ask_teach_demos.h"
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
/**********************
* GLOBAL PROTOTYPES
**********************/
void MENU_TEST_GUI_APP(void);
/**********************
* MACROS
**********************/
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* MENU_TEST_DEMO_H */
在lv_100ask_teach_demos.h包含例程的头文件menu_test_demo.h,使用相对路径
在头文件lv_100ask_teach_demos_conf.h中定义宏开关USE_MENU_TEST_DEMO
main函数中调用测试函数MENU_TEST_GUI_APP
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow)
{
/*Initialize LittlevGL*/
lv_init();
/*Initialize the HAL for LittlevGL*/
lv_win32_init(hInstance, SW_SHOWNORMAL, 320, 240, NULL);
/*Output prompt information to the console, you can also use printf() to print directly*/
LV_LOG_USER("LVGL initialization completed!");
//printf("www.100ask.net: Lvgl initialization complete!\n");
/*Run the demo*/
//lv_100ask_demo_course_2_1_1(); // 基础对象(lv_obj),"Hello, LVGL!"
//lv_100ask_demo_course_2_2_2(); // 基础对象的大小(size)
//lv_100ask_demo_course_2_2_3(); // 基础对象的位置(position)
//lv_100ask_demo_course_2_2_4(); // 基础对象的盒子模型(border-box)
//lv_100ask_demo_course_2_2_5(); // 基础对象的样式(styles)
//lv_100ask_demo_course_2_2_6(); // 基础对象的事件(events)、事件冒泡
//lv_100ask_demo_course_3_1_1(); // 组件(widgets): 标签(label)的用法
//lv_100ask_demo_course_3_1_2(); // 组件(widgets): 标签(label),显示中文
//lv_100ask_demo_course_3_2_1(); // 组件(widgets): 按钮(lv_btn)的用法
//lv_100ask_demo_course_3_3_1(); // 组件(widgets): 使用物理按键代替触摸(groups)
//lv_100ask_demo_course_3_4_1(); // 组件(widgets): 开关(lv_switch)的用法
//lv_100ask_demo_course_3_5_1(); // 组件(widgets): 复选框(lv_checkbox)的用法
//lv_100ask_demo_course_3_6_1(); // 组件(widgets): 下拉列表(lv_dropdown))的用法
//lv_100ask_demo_course_3_7_1(); // 组件(widgets): 滚轮(lv_roller)的用法
//lv_100ask_demo_course_3_8_1(); // 组件(widgets): 进度条(lv_bar)的用法
//lv_100ask_demo_course_3_9_1(); // 组件(widgets): 进度条(lv_slider)的用法
//lv_100ask_page_manager_simple_test();
MENU_TEST_GUI_APP();
while(!lv_win32_quit_signal) {
/* Periodically call the lv_task handler.
* It could be done in a timer interrupt or an OS task too.*/
lv_task_handler();
usleep(10000); /*Just to let the system breath*/
}
return 0;
}
页面管理器使用
配置
下载lv_lib_100ask_masterf放在图中所示文件夹,代码下载地址
创建ccd_test_demo文件夹放在图中位置,ccd_test_demo.c需要使用lv_100ask_page_manager.c中的页面管理器。
ccd_test2_demo.c文件
ccd_test2_demo.h文件
lv_lib_100ask.h文件中#include “test/ccd_test2_demo/ccd_test2_demo.h”
lv_lib_100ask_conf.h文件中 #define CCD_TEST 1
最后在lv_lib_100ask_conf_internal.h文件中添加方框中的程序
经过以上步骤之后看就可以使用页面管理器中的接口函数了
程序修改
页面管理器库函数
修改函数lv_100ask_page_manager_set_open_page,不再调用返回按钮创建函数lv_page_back_btn_create,让用户自定义按钮样式
if (lv_obj_get_child_cnt(obj) == 0)
{
page->init(obj); //传入obj参数执行函数指针 page->init(obj);初始化页面,创建返回按钮
}
用户自定义程序
主页面,不需要返回按键
void init_main_page(lv_obj_t * page)
{
}
子页面
void init_page1(lv_obj_t * page)
{
lv_obj_t * cont = lv_obj_create(parent);
//返回按钮
lv_obj_t *back_btn=lv_btn_create(cont);
lv_obj_set_size(back_btn, 60,40);
lv_obj_set_pos(back_btn,250,30);
lv_obj_t *label=lv_label_create(back_btn);
lv_obj_set_style_text_font(label,&ch_word,0); //设置ch_word为当前label字体
lv_label_set_text(label, "返回");
lv_obj_center(label);
lv_obj_add_event_cb(back_btn, lv_page_back_event_cb, LV_EVENT_CLICKED, lv_obj_get_parent(parent));
}
注册按键事件回调函数lv_page_back_event_cb,功能为返回主页面