📄 menu_gui.c
字号:
//========================================================================
// 文件名: Menu_GUI.c
// 作 者: Xinqiang Zhang(email: Xinqiang@Mzdesign.com.cn)
// www.Mzdesign.com.cn
// 日 期: 2007/03/24
// 描 述: 菜单应用范例程序--UI显示刷新控制函数,配合MzDesign提供的通用版
// LCD基础驱动程序
// 此代码适用于无byte操作的16位MCU,如凌阳的unsp系列MCU
//
// 参 考:
// 版 本:
// 2007/03/24 First version Mz Design
// 2007/07/26 V1.01 Mz Design
// 修改Show_Item函数,使之适应不同的LCD模块的驱动
//
//========================================================================
#include "LCD_Dis.h"
#include "LCD_Config.h"
#include "Menu_GUI_config.h"
UCHAR Y_WIDTH_MENU=16;
UCHAR X_SPACE_FRONT=10;
UCHAR Dis_Menu_Num=0;
UCHAR Font_GB=0;
UCHAR Font_String=0;
//=====================================================================//
//函数:UCHAR ShowMenu_Item(UCHAR y,UINT* Menu_String,UCHAR Font_Color)
//描述:显示菜单项子函数
//参数:space_front 显示缩进值
// y Y轴坐标
// Menu_String 菜单项链表的首地址指针
//返回:显示溢出情况 0:溢出 1:无溢出
//注意:无
//=====================================================================//
UCHAR ShowMenu_Item(UCHAR y,UCHAR* Menu_String,UCHAR Font_Color)
{
UCHAR *uiTemp;
UCHAR uiTemp1;
UCHAR i,x,Char_Nmb;
x = X_SPACE_FRONT; //Mune show front space....
Char_Nmb = (UCHAR)Menu_String[0];
if(Char_Nmb<0xA1)
{
for(i=1;i<=Char_Nmb;i++)
{
uiTemp = (UCHAR*)(Menu_String+i);
uiTemp1 = (UCHAR)*uiTemp;
if(uiTemp1>128)
{
FontSet(Font_GB,Font_Color); //选择汉字字库
uiTemp1 = uiTemp1-128;
}
else
{
FontSet(Font_String,Font_Color);//选择ASCII码字库
}
PutChar(x,y,uiTemp1);
x = x+X_Witch;//GetASIIX();
if(x>=Dis_X_MAX) return 0; //横坐标溢出,返回零
}
}
#ifdef Hz_Lib_II
else
{
FontSet_cn(Font_GB,Font_Color);
FontSet(Font_String,Font_Color);
PutString_cn(x,y,(char *)Menu_String);
}
#endif
return 1;
}
//=====================================================================//
//函数:void UpDate_Menu(UCHAR First_Index,UCHAR Menu_Index,UINT** Menu_List)
//描述:刷新整屏菜单显示函数
//参数:First_Index 当面显示页的第一条菜单号
// Menu_Index 当前处于选用的菜单项
// Menu_List 菜单资源链表指针
//返回:无
//注意:无
//=====================================================================//
UCHAR First_Index_old=0xff;
UCHAR y_Index_old = 0xff;
void UpDate_Menu(UCHAR First_Index,UCHAR Menu_Index,UCHAR** Menu_List)
{
UINT y_width,y_Index;
UCHAR List_Num,i;
List_Num = (UINT)**Menu_List;
y_width = Y_WIDTH_MENU;
y_Index = 0;
while(First_Index>List_Num) First_Index -= List_Num;
if(List_Num>Dis_Menu_Num) List_Num = Dis_Menu_Num;
// if(Menu_Index>List_Num) return;
if(First_Index_old!=First_Index)
{
SetPaintMode(1,MENU_BACK_COLOR);
ClrScreen(); //清屏
SetPaintMode(1,MENU_SELE_COLOR);
if(y_Index_old==0xff)
{
Rectangle(0,First_Index*y_width,Dis_X_MAX,First_Index*y_width+y_width-1,1);
i=First_Index+1;
ShowMenu_Item(y_Index,(UCHAR *)Menu_List[i++],MENU_SELF_COLOR);
y_Index = y_Index+Y_WIDTH_MENU;
for(;i<List_Num+1;i++)
{
ShowMenu_Item(y_Index,(UCHAR *)Menu_List[i],MENU_FONT_COLOR);
y_Index = y_Index+Y_WIDTH_MENU;
}
}
else
{
y_Index_old = Menu_Index-First_Index;
Rectangle(0,y_Index_old*Y_WIDTH_MENU,Dis_X_MAX,y_Index_old*Y_WIDTH_MENU+Y_WIDTH_MENU-1,1);
i=First_Index+1;
while(List_Num)
{
if((i-1)==Menu_Index) ShowMenu_Item(y_Index,(UCHAR *)Menu_List[i],MENU_SELF_COLOR);
else ShowMenu_Item(y_Index,(UCHAR *)Menu_List[i],MENU_FONT_COLOR);
y_Index = y_Index+Y_WIDTH_MENU;
i++;
List_Num--;
}
}
First_Index_old = First_Index;
}
else
{
y_Index = y_Index_old-First_Index_old;
y_Index = y_Index*Y_WIDTH_MENU;
SetPaintMode(1,MENU_BACK_COLOR);
Rectangle(0,y_Index/*y_Index_old*Y_WIDTH_MENU*/,Dis_X_MAX,/*y_Index_old*Y_WIDTH_MENU*/y_Index+Y_WIDTH_MENU-1,1);
ShowMenu_Item(y_Index,(UCHAR *)Menu_List[y_Index_old+1],MENU_FONT_COLOR);
y_Index = Menu_Index-First_Index;
y_Index = y_Index*Y_WIDTH_MENU;
SetPaintMode(1,MENU_SELE_COLOR);
Rectangle(0,/*Menu_Index*Y_WIDTH_MENU*/y_Index,Dis_X_MAX,/*Menu_Index*Y_WIDTH_MENU*/y_Index+Y_WIDTH_MENU-1,1);
ShowMenu_Item(y_Index,(UCHAR *)Menu_List[Menu_Index+1],MENU_SELF_COLOR);
}
y_Index_old = Menu_Index;
}
//=====================================================================//
//函数:void Redraw_Menu(UCHAR First_Index,UCHAR Menu_Index,UINT** Menu_List)
//描述:刷新整屏菜单显示函数
//参数:First_Index 当面显示页的第一条菜单号
// Menu_Index 当前处于选用的菜单项
// Menu_List 菜单资源链表指针
//返回:
//注意:无
//=====================================================================//
void Redraw_Menu(UCHAR First_Index,UCHAR Menu_Index,UCHAR** Menu_List)
{
UCHAR *Menu_Config;
First_Index_old=0xff;
Menu_Config = (UCHAR *)(*Menu_List);
Font_GB = *(Menu_Config+1);
Font_String = *(Menu_Config+2);
Y_WIDTH_MENU = *(Menu_Config+3);
X_SPACE_FRONT = *(Menu_Config+4);
Dis_Menu_Num = (Dis_Y_MAX+1)/Y_WIDTH_MENU;
UpDate_Menu(First_Index,Menu_Index,Menu_List);
}
//=====================================================================//
//函数:void Initial_Menu(UINT** Menu_List)
//描述:刷新整屏菜单显示函数
//参数:Menu_List 菜单资源链表指针
//返回:
//注意:无
//=====================================================================//
void Initial_Menu(UCHAR** Menu_List)
{
UCHAR *Menu_Config;
First_Index_old=0xff;
y_Index_old = 0xff;
Menu_Config = (UCHAR *)(*Menu_List);
Font_GB = *(Menu_Config+1);
Font_String = *(Menu_Config+2);
Y_WIDTH_MENU = *(Menu_Config+3);
X_SPACE_FRONT = *(Menu_Config+4);
Dis_Menu_Num = (Dis_Y_MAX+1)/Y_WIDTH_MENU;
UpDate_Menu(0,0,Menu_List);
}
//=====================================================================//
//函数:unsigned int GetMLNum(unsigned int* Menu_List)
//描述:获取菜单资源的菜单项个数函数
//参数: Menu_List 菜单资源链表指针
//返回:菜单项个数
//注意:无
//=====================================================================//
UCHAR GetMLNum(UCHAR **Menu_List)
{
UCHAR uiTemp;
// UCHAR code*Menu_Config;
uiTemp/*Menu_Config*/ = (unsigned char)**Menu_List;
// uiTemp = (UCHAR)*Menu_Config;
return uiTemp-1;
}
//=====================================================================//
//函数:unsigned int GetMLiNum_Page(unsigned int* Menu_List)
//描述:获取菜单资源在一屏可以显示的菜单项个数函数
//参数: Menu_List 菜单资源链表指针
//返回:菜单项个数
//注意:无
//=====================================================================//
UCHAR GetMLiNum_Page(UCHAR** Menu_List)
{
UCHAR uiTemp;
UCHAR *Menu_Config;
Menu_Config = (UCHAR *)(Menu_List[0]);
uiTemp = *(Menu_Config+3);
uiTemp = (Dis_Y_MAX+1)/uiTemp; //
return uiTemp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -