📄 menu.c
字号:
//====================================================================================
//File name: Menu.c
//Description: Handle menu
//Update: V1.0 by wangtao <wangtao@sunnorth.com.cn>
//====================================================================================
#include "SystemHeader.h"
short Menu_CurItemSelected;
MENU *pMenu_Cur;
//=============================================================
//Prototype: void Menu_Display(MENU *pMenu)
//Description: Display menu
//Argument: pMenu - Menu to be displayed
//Return Value: None
//=============================================================
void Menu_Display(MENU *pMenu)
{
unsigned short i;
short TempX, TempY, TempR, Temp;
unsigned short OldColor, TempColor;
const char *p;
STR_FONT ChineseFont, AsciiFont;
TFT_SetTransparency(0);
TFT_SetChineseFont(pMenu->ChineseFont);
TFT_SetAsciiFont(pMenu->AsciiFont);
OldColor = TFT_GetColor();
TFT_GetChineseFont(&ChineseFont);
TFT_GetAsciiFont(&AsciiFont);
TempR = pMenu->ItemHeight >> 2;
for(i = 0; i < pMenu->ItemCount; i++)
{
TempX = pMenu->x;
TempY = pMenu->y + i * (pMenu->ItemHeight + pMenu->ItemSpacing);
TempColor = (i==pMenu->ItemSelected) ? pMenu->BorderColor_Sel : pMenu->BorderColor;
// TFT_SetColor(TempColor);
// TFT_Circle(TempX+TempR, TempY+TempR, TempR, PAINT_HOLLOW);
// TFT_Circle(TempX+TempR, TempY+pMenu->ItemHeight-TempR, TempR, PAINT_HOLLOW);
// TFT_Circle(TempX+pMenu->ItemWidth-TempR, TempY+TempR, TempR, PAINT_HOLLOW);
// TFT_Circle(TempX+pMenu->ItemWidth-TempR, TempY+pMenu->ItemHeight-TempR, TempR, PAINT_HOLLOW);
TempColor = (i==pMenu->ItemSelected) ? pMenu->BackColor_Sel : pMenu->BackColor;
TFT_SetColor(TempColor);
TFT_Rectangle(TempX+TempR, TempY+1, TempX+pMenu->ItemWidth-TempR, TempY+pMenu->ItemHeight-1, PAINT_SOLID);
TFT_Rectangle(TempX+1, TempY+TempR, TempX+TempR, TempY+pMenu->ItemHeight-TempR, PAINT_SOLID);
TFT_Rectangle(TempX+pMenu->ItemWidth-TempR, TempY+TempR, TempX+pMenu->ItemWidth-1, TempY+pMenu->ItemHeight-TempR, PAINT_SOLID);
TFT_Circle(TempX+TempR, TempY+TempR, TempR-1, PAINT_SOLID);
TFT_Circle(TempX+TempR, TempY+pMenu->ItemHeight-TempR, TempR-1, PAINT_SOLID);
TFT_Circle(TempX+pMenu->ItemWidth-TempR, TempY+TempR, TempR-1, PAINT_SOLID);
TFT_Circle(TempX+pMenu->ItemWidth-TempR, TempY+pMenu->ItemHeight-TempR, TempR-1, PAINT_SOLID);
TempColor = (i==pMenu->ItemSelected) ? pMenu->BorderColor_Sel : pMenu->BorderColor;
TFT_SetColor(TempColor);
TFT_Line(TempX+TempR, TempY, TempX+pMenu->ItemWidth-TempR, TempY);
TFT_Line(TempX+TempR, TempY+pMenu->ItemHeight, TempX+pMenu->ItemWidth-TempR, TempY+pMenu->ItemHeight);
TFT_Line(TempX, TempY+TempR, TempX, TempY+pMenu->ItemHeight-TempR);
TFT_Line(TempX+pMenu->ItemWidth, TempY+TempR, TempX+pMenu->ItemWidth, TempY+pMenu->ItemHeight-TempR);
TempColor = (i==pMenu->ItemSelected) ? pMenu->ForeColor_Sel : pMenu->ForeColor;
TFT_SetColor(TempColor);
TFT_SetBGColor(COLOR_BLACK);
Temp = 0;
p = pMenu->Items[i];
while(*p!='\0')
{
if(*p&0x80)
{
p++;
Temp += ChineseFont.CharWidth;
}
else
{
Temp += AsciiFont.CharWidth;
}
p++;
}
TempX = TempX + ((pMenu->ItemWidth - Temp)>>1);
TempY = TempY + ((pMenu->ItemHeight - ChineseFont.CharHeight)>>1);
TFT_SetTextPos(TempX, TempY);
TFT_Print((char*)pMenu->Items[i]);
}
Menu_CurItemSelected = pMenu->ItemSelected;
pMenu_Cur = pMenu;
TFT_SetColor(OldColor);
}
void Menu_ServiceLoop(void)
{
if(pMenu_Cur->ItemSelected != Menu_CurItemSelected)
{
Menu_Display(pMenu_Cur);
}
}
short Menu_CursorItem(short AbsX, short AbsY)
{
short Ret, i;
short TempX, TempY, TempX1, TempY1, TempX2, TempY2;
Ret = -1;
TFT_GetWindow(&TempX1, &TempY1, &TempX2, &TempY2);
TempX = AbsX - TempX1;
TempY = AbsY - TempY1;
TempX1 = pMenu_Cur->x;
TempX2 = TempX1 + pMenu_Cur->ItemWidth;
for(i=0; i<pMenu_Cur->ItemCount; i++)
{
TempY1 = pMenu_Cur->y + i * (pMenu_Cur->ItemHeight + pMenu_Cur->ItemSpacing);
TempY2 = TempY1 + pMenu_Cur->ItemHeight;
if(TempX>=TempX1 && TempX<=TempX2 && TempY>=TempY1 && TempY<=TempY2)
{
Ret = i;
break;
}
}
return Ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -