搜索
bottom↓
回复: 4

请教傻孩子的目录引擎中ShowMenu函数【恢复】

[复制链接]

出0入0汤圆

发表于 2008-12-2 14:59:03 | 显示全部楼层 |阅读模式
最近在做一个LCD16*2的模块,幸好论坛上看到傻孩子发过他目录的引擎代码,

http://ouravr.com/bbs/bbs_content.jsp?bbs_sn=457580&bbs_page_no=1&search_mode=1&search_text=%B2%CB%B5%A5&bbs_id=9999



拿来好好学习,由于功力不够,在解读其中一个ShowMenu函数是有点看不懂,特来向各位请教。

先说说我的理解,

其中全局变量(*MenuPoint)是指向当前目录的结构体指针,DisplayPoint用来表示显示目录,UserChoose表示用户选择目录,MaxItem表示当前目录一共有几个项目。



我不太明白,

DisplayStart是做什么用?

为什么显示的时候有 if (MaxItems>= 4)的区分?



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

*     全局变量声明区   *

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



    

    struct MenuItem (*MenuPoint) = MainMenu;

    short DisplayStart = 0;

    short UserChoose = 0;

    short DisplayPoint = 0;

    short MaxItems;    



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

*  函数说明:目录显示函数                                     *

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

void ShowMenu(void)

{

    short n = 0;



    MaxItems = MenuPoint[0].MenuCount;

    DisplayPoint = DisplayStart;

        if (MaxItems>= 4)

        {

             for (n = 0;n<4;n++)

             {

                         

                 LOCATE(n+1,1);

                 PRINT(MenuPoint[DisplayPoint].DisplayString);

                 

                 if ((DisplayPoint) == UserChoose)

                     {

                         BOX(1,n*16+1,126,(n+1)*16-2,1,1);

                     }

                 

                     DisplayPoint +=1;

                     if ((DisplayPoint) == (MaxItems))

                     {

                         DisplayPoint = 0;

                     }

             }

         }

         else

         {

             for (n = 0;n<MaxItems;n++)

             {

                         

                 LOCATE(n+1,1);

                 PRINT(MenuPoint[DisplayPoint].DisplayString);

                 

                 if ((DisplayPoint) == UserChoose)

                     {

                         BOX(1,n*16+1,126,(n+1)*16-2,1,1);

                     }

                 

                     DisplayPoint +=1;

                     if ((DisplayPoint) == (MaxItems))

                     {

                         DisplayPoint = 0;

                     }

                 

             }

         }

        //BOX(0,0,127,63,2,2);

}

出0入296汤圆

发表于 2008-12-3 18:31:48 | 显示全部楼层
to 【3楼】 frank21 

    对不起,忘记提供参考链接了,现在补上

    http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=827434&bbs_page_no=2&bbs_id=1038

    有什么问题大家多多交流哈

    

    

出0入0汤圆

 楼主| 发表于 2008-12-3 04:43:47 | 显示全部楼层
谢谢yan97ao 



思维定势阿,想着自己做1602,就把傻孩子的程序往这方面想,进了死胡同了。

而且看程序不仔细,刚才看了LOCATE     PRINT   BOX函数,对功能基本理解了



【2楼】 Gorgon Meducer 傻孩子 

关于1602的菜单引擎,你参考的那个太老了。

这里有一个新的,有具体的范例的,使用1602实现。



请问新的是在你论坛置顶的头文件中吗?

出0入296汤圆

发表于 2008-12-2 21:05:57 | 显示全部楼层
关于1602的菜单引擎,你参考的那个太老了。

这里有一个新的,有具体的范例的,使用1602实现。

出0入0汤圆

发表于 2008-12-2 18:14:09 | 显示全部楼层
傻孩子的这个函数默认情况下一屏显示四个菜单项,所以判断if (MaxItems>= 4)就是判断你所存储的所有菜单项在一屏以内能不能装得下

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

本版积分规则

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

GMT+8, 2024-5-9 03:04

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

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