📄 menu.lst
字号:
C51 COMPILER V7.50 MENU 09/11/2007 21:56:46 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MENU
OBJECT MODULE PLACED IN .\OBJ\menu.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE menu.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\LST\menu.lst) OBJECT(.\OBJ\m
-enu.obj)
line level source
1 /****************************************************************************************
2 * 文件名:MENU.C
3 * 功能:菜单显示及操作(下拉式菜单)。
4 * 作者:黄绍斌
5 * 日期:2004.02.26
6 * 备注:使用GUI_SetBackColor()函数设置显示颜色及背景色。
7 ****************************************************************************************/
8 #include "config.h"
9
10
11 #if GUI_MenuDown_EN==1
/****************************************************************************
* 名称:GUI_MMenuDraw()
* 功能:显示主菜单,加上边框。
* 入口参数:men 主菜单句柄
* 出口参数:返回0表示操作失败,返回1表示操作成功
****************************************************************************/
uint8 GUI_MMenuDraw(MMENU *men)
{ WINDOWS *mwin;
uint8 i;
uint8 xx;
/* 参数过滤 */
if( (men->no)==0 ) return(0);
mwin = men->win; // 取得窗口句柄
/* 判断是否可以显示主菜单 */
if( (mwin->hight)<50 ) return(0);
if( (mwin->with)<50 ) return(0);
/* 画菜单条,并显示菜主单 */
GUI_HLine(mwin->x, mwin->y + 22, mwin->x + mwin->with - 1, disp_color);
xx = mwin->x;
for(i=0; i<(men->no); i++)
{ if( (xx+MMENU_WIDTH) > (mwin->x + mwin->with) ) return(0);
GUI_PutNoStr(xx+2, mwin->y + 14, men->str[i], 4); // 书写主菜单文字
xx += MMENU_WIDTH;
GUI_RLine(xx, mwin->y + 12, mwin->y + 22, disp_color); // 显示主菜单分界线
}
return(1);
}
/****************************************************************************
* 名称:GUI_MMenuSelect()
* 功能:当前主菜单,加下划线,表示当前主菜单。
* 入口参数:men 主菜单句柄
* no 所选的主菜单项
* 出口参数:无
****************************************************************************/
void GUI_MMenuSelect(MMENU *men, uint8 no)
C51 COMPILER V7.50 MENU 09/11/2007 21:56:46 PAGE 2
{ WINDOWS *mwin;
uint8 xx;
/* 参数过滤 */
if( (men->no)==0 ) return;
if( no>(men->no) ) return;
mwin = men->win; // 取得窗口句柄
/* 判断是否可以显示主菜单 */
if( (mwin->hight)<50 ) return;
if( (mwin->with)<50 ) return;
/* 显示下划线 */
xx = mwin->x + no*MMENU_WIDTH;
GUI_HLine(xx+1, mwin->y + 22-1, xx+MMENU_WIDTH- 1, disp_color);
}
/****************************************************************************
* 名称:GUI_MMenuNSelect()
* 功能:取消当前主菜单,去除下划线。
* 入口参数:men 主菜单句柄
* no 所选的主菜单项
* 出口参数:无
****************************************************************************/
void GUI_MMenuNSelect(MMENU *men, uint8 no)
{ WINDOWS *mwin;
uint8 xx;
/* 参数过滤 */
if( (men->no)==0 ) return;
if( no>(men->no) ) return;
mwin = men->win; // 取得窗口句柄
/* 判断是否可以显示主菜单 */
if( (mwin->hight)<50 ) return;
if( (mwin->with)<50 ) return;
/* 显示下划线 */
xx = mwin->x + no*MMENU_WIDTH;
GUI_HLine(xx+1, mwin->y + 22-1, xx+MMENU_WIDTH- 1, back_color);
}
/****************************************************************************
* 名称:GUI_SMenuDraw()
* 功能:显示子菜单,加上边框。
* 入口参数:men 子菜单句柄
* 出口参数:返回0表示操作失败,返回1表示操作成功
****************************************************************************/
uint8 GUI_SMenuDraw(SMENU *men)
{ WINDOWS *mwin;
uint32 xx, yy;
uint8 i;
mwin = men->win;
/* 判断是否可以显示主菜单 */
if( (mwin->hight)<50 ) return(0);
if( (mwin->with)<50 ) return(0);
/* 画菜子单项。下拉子菜单,以向左下拉为原则,若右边溢出则以右下拉显示 */
C51 COMPILER V7.50 MENU 09/11/2007 21:56:46 PAGE 3
xx = mwin->x;
xx += (men->mmenu_no)*MMENU_WIDTH;
yy = mwin->y + 22;
yy += (men->no) * 11 + 2;
if( (xx+SMENU_WIDTH) <= (mwin->x + mwin->with - 1) )
{ /* 以左下拉为原则显示子菜单 */
if( (men->mmenu_no) == 0 )
{ GUI_RLine(xx+SMENU_WIDTH, mwin->y + 22, yy, disp_color);
GUI_HLine(xx, yy, xx+SMENU_WIDTH, disp_color);
}
else
{ GUI_Rectangle(xx, mwin->y + 22, xx+SMENU_WIDTH, yy, disp_color);
}
GUI_HLine(xx+1, mwin->y + 22, xx+MMENU_WIDTH-1, back_color);
}
else
{ /* 以右下拉为原则 */
if( (xx+MMENU_WIDTH) == (mwin->x + mwin->with - 1) )
{ GUI_RLine(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22, yy, disp_color);
GUI_HLine(xx-(SMENU_WIDTH-MMENU_WIDTH), yy, xx+MMENU_WIDTH, disp_color);
}
else
{ GUI_Rectangle(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22, xx+MMENU_WIDTH, yy, disp_color);
}
GUI_HLine(xx+1, mwin->y + 22, xx+MMENU_WIDTH-1, back_color);
xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
}
/* 显示菜单文字 */
xx++;
yy = mwin->y + 22 + 2;
for(i=0; i<(men->no); i++)
{ if( i == (men->state) ) // 判断所选择的菜单项
{ /* 显示背景色 */
GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, disp_color);
/* 显示菜单字符 */
GUI_ExchangeColor();
GUI_PutNoStr(xx+1, yy+1, men->str[i], 8); // 书写子菜单文字
GUI_ExchangeColor();
}
else
{ /* 显示背景色 */
GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, back_color);
/* 显示菜单字符 */
GUI_PutNoStr(xx+1, yy+1, men->str[i], 8); // 书写子菜单文字
}
yy += 11;
}
return(1);
}
/****************************************************************************
* 名称:GUI_SMenuSelect()
* 功能:选择新的子菜单。
* 入口参数:men 子菜单句柄
C51 COMPILER V7.50 MENU 09/11/2007 21:56:46 PAGE 4
* old_no 原先选择的子菜单项
* new_no 现要选择的子菜单项
* 出口参数:无
****************************************************************************/
void GUI_SMenuSelect(SMENU *men, uint8 old_no, uint8 new_no)
{ WINDOWS *mwin;
uint8 xx, yy;
/* 参数过滤 */
if(old_no==new_no) return;
xx = men->no;
if( (old_no>xx) || (new_no>xx) ) return;
/* 设置新的选择的子菜单项 */
men->state = new_no;
/* 进行菜单反相显示 */
mwin = men->win;
xx = mwin->x;
xx += (men->mmenu_no)*MMENU_WIDTH;
if( (xx+SMENU_WIDTH) > (mwin->x + mwin->with - 1) )
{ /* 以右下拉为原则显示子菜单,所以xx设置在左端 */
xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
}
xx++;
/* 取消原子菜单选择 */
yy = mwin->y + 22 + 2;
yy += old_no*11;
GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, back_color);
GUI_PutNoStr(xx+1, yy+1, men->str[old_no], 8);
/* 选择新的子菜单 */
yy = mwin->y + 22 + 2;
yy += new_no*11;
GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, disp_color);
GUI_ExchangeColor();
GUI_PutNoStr(xx+1, yy+1, men->str[new_no], 8);
GUI_ExchangeColor();
}
/****************************************************************************
* 名称:GUI_SMenuHide()
* 功能:消隐子菜单项。
* 入口参数:men 子菜单句柄
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -