搜索
bottom↓
回复: 17

分享一个自己写的菜单架构测试小程序,欢迎大家指正

[复制链接]

出0入0汤圆

发表于 2019-6-26 15:01:42 | 显示全部楼层 |阅读模式
//首先贴出使用到的结构体 menu.h
#ifndef _MENU_H
#define _MENU_H

//菜单索引ID
typedef enum {
        id_main,
        id_set,
        id_test,
        id_set_date,
        id_total,
        id_invoid = 0xff,
}MENU_E;

//菜单子项结构体

typedef struct MenuItem
{   
    char *displayStr;
    MENU_E childrenMenuId;
}MenuItem_T;

//一个菜单页结构体

typedef struct MenuFrame
{
        MENU_E ownMenuId;
        int  maxIndex;
        MENU_E parentMenuId;
        MenuItem_T* pMenuItems;
}MenuFrame_T;

//菜单控制结构体

typedef struct MenuContorl
{
        short currtIndex;
        MenuFrame_T* pCurrtMenu;
        void (*handle)(struct MenuContorl* currt);
}MenuContorl_T;

#endif
//下面是具体的测试使用部分 menu.c

#define ITERMS_LENGHT(a)   {sizeof(a)/sizeof(a[0])}

MenuItem_T setDateMenusItem[] = {

{"set year",id_invoid},
{"set mon",id_invoid},
{"set day",        id_invoid},
{"set hour", id_invoid},
{"set min", id_invoid},
{"set sec", id_invoid},

};
MenuItem_T setMenusItem[] = {

{"set1",        id_invoid        },
{"set2",        id_set_date        }
};


MenuItem_T mainMenuItem[] = {
{"SET",         id_set                },
{"TEST",        id_test                },       
{"EXE",                id_invoid        }
};

MenuItem_T testMenusItem[] = {

{"test1",        id_invoid},
{"test2",        id_invoid}
};

void menuHandle(MenuContorl_T* currt)
{
        printf("menuHandle: menu id:%d item:%d\n",currt->pCurrtMenu->ownMenuId,currt->currtIndex);
}


MenuFrame_T sysMenu[id_total] = {
{id_main,ITERMS_LENGHT(mainMenuItem),        id_invoid,                mainMenuItem                        },
{id_set,ITERMS_LENGHT(setMenusItem),        id_main,                setMenusItem                        },
{id_test,ITERMS_LENGHT(testMenusItem),        id_main,                testMenusItem                        },
{id_set_date,ITERMS_LENGHT(setDateMenusItem),id_set,        setDateMenusItem                 }
};

MenuContorl_T menuControl = {
        0,
        sysMenu,
        menuHandle
};

void menu_Frame_init(MenuContorl_T* pMenu)
{
        int i;
        int len = pMenu->pCurrtMenu->maxIndex;
        printf("***********menu********** \n");
        for(i=0;i<len;i++)
        {
                printf("%d.%s\n",i+1,pMenu->pCurrtMenu->pMenuItems[i].displayStr);
        }
        pMenu->currtIndex = 0;
}
//测试部分,我这边是使用串口接收字符控制
if(ch == '+')  //菜单下移
{
        if(menuControl.currtIndex  < menuControl.pCurrtMenu->maxIndex)
                menuControl.currtIndex++;
        if(menuControl.currtIndex == menuControl.pCurrtMenu->maxIndex)
                menuControl.currtIndex = 0;
        printf("***currt:%s***\n",menuControl.pCurrtMenu->pMenuItems[menuControl.currtIndex].displayStr);
       
}
else if (ch == '>') //菜单进入子项
{
        if(id_invoid != menuControl.pCurrtMenu->pMenuItems[menuControl.currtIndex].childrenMenuId)
        {
                menuControl.pCurrtMenu = &sysMenu[menuControl.pCurrtMenu->pMenuItems[menuControl.currtIndex].childrenMenuId];
                menu_Frame_init(&menuControl);
        }
}
else if (ch == '<') //菜单返回上一级
{
        if(id_invoid != menuControl.pCurrtMenu->parentMenuId)
        {
                menuControl.pCurrtMenu = &sysMenu[menuControl.pCurrtMenu->parentMenuId];
                menu_Frame_init(&menuControl);
        }
}
else if (ch == '=') //菜单对应项处理函数
{
                menuControl.handle(&menuControl);
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2019-6-26 16:09:25 | 显示全部楼层
支持下,不错!

出0入0汤圆

发表于 2019-6-26 16:48:32 | 显示全部楼层
马克一下!

出140入115汤圆

发表于 2019-6-26 17:10:19 | 显示全部楼层
多谢分享   

出0入0汤圆

发表于 2019-6-26 17:27:40 | 显示全部楼层
谢谢分享  

出0入49汤圆

发表于 2019-6-26 17:34:55 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2019-6-27 15:10:44 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2019-6-28 08:56:24 | 显示全部楼层
关注,多谢分享。改天尝试移植下~

出0入0汤圆

发表于 2019-6-28 09:40:47 | 显示全部楼层
好东西,细细品尝

出0入0汤圆

发表于 2019-6-28 09:55:50 | 显示全部楼层
写的很好,感谢分享!

出0入0汤圆

发表于 2019-6-28 10:01:28 | 显示全部楼层
标记,学习一下,等我学到这个地方,再借鉴一下

出0入0汤圆

发表于 2019-6-28 18:28:23 | 显示全部楼层
謝謝分享

出0入8汤圆

发表于 2019-6-28 18:33:22 来自手机 | 显示全部楼层
真好!   

出0入0汤圆

发表于 2019-6-28 18:48:30 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2019-6-29 05:42:34 | 显示全部楼层
写的很好,感谢分享!

出0入0汤圆

发表于 2019-6-30 17:08:28 | 显示全部楼层
谢谢分享!!!

出0入0汤圆

发表于 2019-7-1 17:41:25 | 显示全部楼层
marker 一下,过后再看

出0入0汤圆

发表于 2019-7-1 17:42:56 | 显示全部楼层
收藏了,谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-23 14:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表