搜索
bottom↓
回复: 2

请教马老师菜单程序方法

[复制链接]

出0入0汤圆

发表于 2015-1-5 21:52:39 | 显示全部楼层 |阅读模式
最近一直在做菜单程序,发现讨论的以下两个方法比较多
1方法(有不少文章提到此种方式)此处截取部分
typedef struct
   {
        uchar current;
        uchar up;  //暂定键值6为up
        uchar down;//暂定键值15为down
        //uchar enter;
        void (*current_operation)();
        } key_table;
        
key_table  table[12]=
{
        {0,11,1,(*fun0)},      // 显示“菜单”
        {1,0,2,(*fun1)},      // 显示“1系统设置”
        {2,1,3,(*fun2)},      // 显示“2控制时间”
    {3,2,4,(*fun3)},      // 显示“3查询温度”
    {4,3,5,(*fun4)},     // 显示“温度×××C”
        {5,4,6,(*fun5)},     // 显示“(时钟)”
        {6,5,7,(*fun6)},     // 显示“设置时钟年”
        {7,6,8,(*fun7)},     // 显示“设置时钟月”
        {8,7,9,(*fun8)},     // 显示“设置时钟日”
        {9,8,10,(*fun9)},    // 显示“设置时钟时”
        {10,9,11,(*fun10)},  // 显示“设置时钟分”
        {11,10,0,(*fun11)},  // 显示“设置时钟秒”
};

2方法,此处截取部分

/***********************

*     结构体宏定义     *

***********************/

struct MenuItem        

{

    char MenuCount;

    char *DisplayString;

    void (*Subs)();

    struct MenuItem *ChildrenMenus;

    struct MenuItem *ParentMenus;

}NULL_MENU;



void NULL_FUNCTION(void){}



我们看到,菜单的最小单元MenuItem的组成其实非常简单:

菜单项所在层的菜单项数目(度);

菜单项显示出来的字符串;

菜单需要执行的功能的函数指针(可以为空);

孩子指针(表明选择该菜单项后,跳转到哪个子菜单去);

父指针(表明选择ESC后,跳转到哪个菜单去);



看一个菜单实例:

(源代码)



struct MenuItem MainMenu[3];

struct MenuItem TimeMenu[4];

struct MenuItem VoiceMenu[5];

struct MenuItem RobotMenu[5];

struct MenuItem FlashMenu[5];
想请教一下马老师两种方式的优缺点,个人觉得第一种方式列表的形式比较直观,但涉及到的每一个状态都要一个函数,有些比较相近的状态切换时有很多重复。
第二种方式上下级的形式很明确,但个人觉得没有第一种方式简洁明了。
不知道大家都用那种方式还是有更好的两全其美的,本人愚钝,向马老师学习

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

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

发表于 2015-1-6 08:54:30 | 显示全部楼层
马老师好像没讲过菜单 希望听听马老的见解

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-3-28 21:30

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

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