新增b_menu
方便多级菜单使用的场景,增加b_menu。可以通过b_button b_menu b_gui三个功能模块联合起来做实验。
使用步骤:
1. 设计菜单界面,给每个界面一个ID号,如下图所示
2.在b_config.h使能b_menu,配置页面数量
3.开始构建页面之间的关系,页面与页面的关系有两种(兄弟关系和父子关系)。新增页面并指定画图程序:
bInit(); //BabyOS Init
bButtonInit(); //Button
bGUI_Init(SSD1289, NULL); //GUI
UG_PutString(50, 200, "BabyOS test b_menu");
//Create menu
bMenuAddSibling(1, 1, Create1);
bMenuAddSibling(1, 2, Create2);
bMenuAddChild(1, 3, Create3);
bMenuAddChild(2, 4, Create4);
bMenuAddSibling(4, 5, Create5);
bMenuAddChild(4, 6, Create6);
bMenuAddChild(5, 7, Create7);
第一个参数是新增页面的参考页面的ID,根据与参考页面的关系调用对应的API,如果是兄弟关系则调用bMenuAddSibling 父子关系则调用bMenuAddChild
第二个参数是新增页面的ID
第三个参数是绘制界面的函数
4.根据不同的按键事件,发送不同的切换指令:
void bButtonCallback(void *p)
{
flex_button_t *btn = (flex_button_t *)p;
if(btn->event != FLEX_BTN_PRESS_DOWN)
{
return;
}
switch(btn->id)
{
case USER_BUTTON_1:
bMenuAction(MENU_UP);
break;
case USER_BUTTON_2:
bMenuAction(MENU_DOWN);
break;
case USER_BUTTON_3:
bMenuAction(MENU_BACK);
break;
case USER_BUTTON_WAKEUP:
bMenuAction(MENU_ENTER);
break;
}
}
切换指令有 UP DOWN BACK ENTER
如果要直接跳转至某个界面,调用void bMenuJump(uint32_t id);
如果涉及到用户权限问题,可以根据需要隐藏某个界面,通过调用int bMenuSetVisible(uint32_t id, uint8_t s);
获取当前界面的ID,调用uint32_t bMenuCurrentID(void);
实验效果如下:
|