落叶行健ywm的个人空间 https://bbs.21ic.com/?772247 [收藏] [复制] [RSS]

日志

我的菜单模板之数据结构

已有 927 次阅读2015-5-12 08:11 |个人分类:嵌入式开发|系统分类:嵌入式系统| parent, 结构体, 嵌入式

嵌入式中一个好的菜单模板可以让你在设计和移植时候很轻松方便,下面就来梳理一下自己的菜单界面。
1:菜单的组织形式第一步就是有个好的结构体。
//定义菜单类型
typedef enum
{
        // 0,1,2,... = parent & title, UISTR_SPACE - top menu
        UIMENU_POPUP = -1,        /*有下级菜单*/
        UIMENU_HASVALUE = -2,//此菜单有数值显示或设置
        UIMENU_CUSTOM = -3,/*有需要用户确认界面*/
        UIMENU_CUSTOM_HASVALUE = -4,
        UIMENU_NOACTION = -5
} T_UI_MENUITEM_TYPE;

//主要的菜单数据结构
typedef struct 
{
        u8 nMenuStr;//菜单位置,主要是在另外一个枚举中索引
        T_UI_MENUITEM_TYPE nType;//菜单类型,见上面定义的数据类型,可根据自己的实际情况自己扩展
} T_UI_MENUITEM;

2:自定义菜单主题名称
//菜单主题定义
enum
{
        //第一组菜单
        UISTR_MENU,//主菜单设置
        UISTR_MENU_ONE,//平层设置
        UISTR_MENU_TWO,//重量设置
        UISTR_MENU_THR,//楼层学习
        UISTR_MENU_FOU,//密码设置

        //第二组菜单
        //UISTR_MENU_ONE,
        UISTR_MENU_ONE_ONE,//平层设置界面
        UISTR_MENU_ONE_TWO,//上升补偿值显示
        UISTR_MENU_ONE_THR,
        UISTR_MENU_ONE_FOU,

        //第三组菜单
        //UISTR_MENU_TWO,
        UISTR_MENU_TWO_ONE,//显示额定载重
        UISTR_MENU_TWO_TWO,
        UISTR_MENU_TWO_THR,
        UISTR_MENU_TWO_FOU,
};
我上面只是一个模板,实际要根据情况设置自己能轻而易举识别的定义。

3:再次就是实际情况的菜单数组保存地方了。

const T_UI_MENUITEM g_uiMenuItemsSrc[MENU_ITEM_NUM] =
{
        {UISTR_MENU,   (T_UI_MENUITEM_TYPE)(u8)0},        // 带0结尾的都是主菜单,其下面是有子菜单选项的。
        {UISTR_MENU_ONE,                                                UIMENU_POPUP},//平层设置选项界面
        {UISTR_MENU_TWO,                                                UIMENU_CUSTOM},
        {UISTR_MENU_THR,                                                UIMENU_CUSTOM},
        {UISTR_MENU_FOU,                                                UIMENU_CUSTOM},

        {UISTR_MENU_ONE,                                                (T_UI_MENUITEM_TYPE)(u8)0},       
        {UISTR_MENU_ONE_ONE,                                        UIMENU_CUSTOM},//平层设置界面
        {UISTR_MENU_ONE_TWO,                                        UIMENU_HASVALUE},//上升补偿值
        {UISTR_MENU_ONE_THR,                                        UIMENU_CUSTOM},
        {UISTR_MENU_ONE_FOU,                                        UIMENU_HASVALUE},

        {UISTR_MENU_TWO,                                                        (T_UI_MENUITEM_TYPE)(u8)0},        // 1
        {UISTR_MENU_TWO_ONE,                                                UIMENU_HASVALUE},//额定载重
        //{UISTR_MENU_TWO_TWO,                                                UIMENU_CUSTOM},
        //{UISTR_MENU_TWO_THR,                                                UIMENU_CUSTOM},
        //{UISTR_MENU_TWO_FOR,                                                UIMENU_CUSTOM},

        {-1,                  (T_UI_MENUITEM_TYPE)(u8)0},//菜单解析函数结束查找的标志
};
这个菜单数组保存了我们实际情况的菜单形式。他会被菜单解析函数解析出来,并按自定义规则显示出来。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)