如果每个子菜单包含几个子菜单,则 Back 函数工作不正常,因为 gPrevMenuItemEntry 仅记住先前的值,但当您转到子菜单时,上部菜单项会丢失。 在某些情况下,如果 gPrevMenuItemEntry 大于2,则当您返回顶级 MainMenu 时,应用程序崩溃并陷入 main_assert()中,因为顶级菜单上只有3个项目。
gPrevMenuItemEntry 应是 CUI_menu_s 结构的一部分。
void CUI_menuActionBack(const int32_t _itemEntry)
{
if (NULL != gpCurrMenu->pUpper)
{
gpCurrMenu = gpCurrMenu->pUpper;
gCurrMenuItemEntry = gPrevMenuItemEntry;
}
}
固定代码示例:
void CUI_menuActionBack(const int32_t _itemEntry)
{
if (NULL != gpCurrMenu->pUpper)
{
gCurrMenuItemEntry = gpCurrMenu->gPrevMenuItemEntry;
gpCurrMenu = gpCurrMenu->pUpper;
}
}