请教傻孩子的目录引擎中ShowMenu函数【恢复】
最近在做一个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.MenuCount;
DisplayPoint = DisplayStart;
if (MaxItems>= 4)
{
for (n = 0;n<4;n++)
{
LOCATE(n+1,1);
PRINT(MenuPoint.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.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);
} to 【3楼】 frank21
对不起,忘记提供参考链接了,现在补上
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=827434&bbs_page_no=2&bbs_id=1038
有什么问题大家多多交流哈
谢谢yan97ao
思维定势阿,想着自己做1602,就把傻孩子的程序往这方面想,进了死胡同了。
而且看程序不仔细,刚才看了LOCATE PRINT BOX函数,对功能基本理解了
【2楼】 Gorgon Meducer 傻孩子
关于1602的菜单引擎,你参考的那个太老了。
这里有一个新的,有具体的范例的,使用1602实现。
请问新的是在你论坛置顶的头文件中吗? 关于1602的菜单引擎,你参考的那个太老了。
这里有一个新的,有具体的范例的,使用1602实现。 傻孩子的这个函数默认情况下一屏显示四个菜单项,所以判断if (MaxItems>= 4)就是判断你所存储的所有菜单项在一屏以内能不能装得下
至于DisplayStart可以当做一个“指针”,指向屏幕上要显示的第一个菜单项对应的MenuPoint数组的下标
页:
[1]