|
最近在做一个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);
} |
|