⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.c

📁 lpc2148 uc/gui的移植例程
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************************
* 文件名:MENU.C
* 功能:菜单显示及操作(下拉式菜单)。
* 备注:使用GUI_SetBackColor()函数设置显示颜色及背景色。
****************************************************************************************/
#include   "..\APP\config.h"
#ifndef   GUI_MenuDown_EN
#define   GUI_MenuDown_EN     0
#endif

/****************************************************************************
* 名称:GUI_ExchangeColor()
* 功能:交换前景色与背景色。用于反相显示。
* 入口参数:无
* 出口参数:无
* 说明:
****************************************************************************/
void  GUI_ExchangeColor(void)
{ // uint8  bakc;
 //  bakc      =   Back_G;
  // Back_G    =   other_C;
  // other_C   =   bakc;

/*   GUI_CopyColor(&bakc, disp_color);
   GUI_CopyColor(&disp_color, back_color);
   GUI_CopyColor(&back_color, bakc);
   */
}

#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 + 19, mwin->x + mwin->with - 1, Windows_C);
   xx = mwin->x;
   for(i=0; i<(men->no); i++)
   {  if( (xx+MMENU_WIDTH) > (mwin->x + mwin->with) ) return(0);
      
      GUI_PutNoStr(xx+4, mwin->y + 12, men->str[i], 4);			// 书写主菜单文字
      xx += MMENU_WIDTH;
      GUI_RLine(xx, mwin->y + 12, mwin->y + 19, Windows_C);	// 显示主菜单分界线      
   }
   
   return(1);
}


/****************************************************************************
* 名称:GUI_MMenuSelect()
* 功能:当前主菜单,反色,表示当前主菜单。
* 入口参数:men		主菜单句柄
*          no		所选的主菜单项
* 出口参数:无
****************************************************************************/
void  GUI_MMenuSelect(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_ExchangeColor();
   GUI_PutNoStr(xx+4, mwin->y + 12, men->str[no], 4);			// 书写主菜单文字
   GUI_ExchangeColor();
//   GUI_HLine(xx+1, mwin->y + 22-1, xx+MMENU_WIDTH- 1, Windows_C);
}


/****************************************************************************
* 名称: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_PutNoStr(xx+4, mwin->y + 12, men->str[no], 4);			// 书写主菜单文字
}



/****************************************************************************
* 名称:GUI_SMenuDraw()
* 功能:显示子菜单,加上边框。
* 入口参数:men		子菜单句柄
* 出口参数:返回0表示操作失败,返回1表示操作成功
****************************************************************************/
uint8  GUI_SMenuDraw(SMENU *men)
{  WINDOWS  *mwin;
   uint8   xx, yy;
   uint8    i;

   mwin = men->win;
   /* 判断是否可以显示主菜单 */
   if( (mwin->hight)<50 ) return(0);
   if( (mwin->with)<50 ) return(0);
    
   /* 画菜子单项。下拉子菜单,以向左下拉为原则,若右边溢出则以右下拉显示 */
   xx = mwin->x;
   xx += (men->mmenu_no)*MMENU_WIDTH;
   yy = mwin->y + 19;
   yy +=  (men->no) * 8 + 2;
   if( (xx+SMENU_WIDTH) <= (mwin->x + mwin->with - 1) ) 
   {  /* 以左下拉为原则显示子菜单 */
      if( (men->mmenu_no) == 0 )
      {
         GUI_RLine(xx+SMENU_WIDTH, mwin->y + 19, yy, Windows_C);
         GUI_HLine(xx, yy, xx+SMENU_WIDTH, Windows_C);
      }
      else
      {  GUI_Rectangle(xx, mwin->y + 19, xx+SMENU_WIDTH, yy, Windows_C);
      }
      GUI_HLine(xx+1, mwin->y + 19, xx+MMENU_WIDTH-1, Back_G );
      
   }
   else
   {  /* 以右下拉为原则 */
      if( (xx+MMENU_WIDTH) == (mwin->x + mwin->with - 1) )
      {  GUI_RLine(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 19, yy, Windows_C);
         GUI_HLine(xx-(SMENU_WIDTH-MMENU_WIDTH), yy, xx+MMENU_WIDTH, Windows_C);
         
      }
      else
      {  
	   GUI_Rectangle(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 19, xx+MMENU_WIDTH, yy,Windows_C);
      }
      GUI_HLine(xx+1, mwin->y + 19, xx+MMENU_WIDTH-1,Back_G );
      
      xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
   }
   
   /* 显示菜单文字 */
   xx++;
   yy = mwin->y + 19 + 2;
   for(i=0; i<(men->no); i++)
   {  if( i == (men->state) )								// 判断所选择的菜单项
      {  /* 显示背景色 */
         GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+8, Windows_C);
         /* 显示菜单字符 */
         GUI_ExchangeColor();
         GUI_PutNoStr(xx+1, yy+1, men->str[i], 8);			// 书写子菜单文字
         GUI_ExchangeColor();
      }
      else
      {  /* 显示背景色 */
         GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+8,Windows_C);
         /* 显示菜单字符 */
         GUI_PutNoStr(xx+1, yy+1, men->str[i], 8);			// 书写子菜单文字
      }   
      
      yy += 8;
   }
    
   return(1);
}



/****************************************************************************
* 名称:GUI_SMenuSelect()
* 功能:选择新的子菜单。
* 入口参数:men		子菜单句柄
*          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 + 19 + 2;
   yy += old_no*8;
   GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+8, Windows_C);
   GUI_PutNoStr(xx+1, yy+1, men->str[old_no], 8);
   /* 选择新的子菜单 */
   yy = mwin->y + 19 + 2;
   yy += new_no*8;
   GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+8, Windows_C);
   GUI_ExchangeColor();
   GUI_PutNoStr(xx+1, yy+1, men->str[new_no], 8);
   GUI_ExchangeColor();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -