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

📄 ico_menu.c

📁 这是周立功开发板上的实验程序,这是周立功开发板上的实验程序,这是周立功开发板上的实验程序,
💻 C
字号:
/****************************************************************************************
* 文件名:ICO_MENU.C
* 功能:多层ICO图标菜单操作。
* 作者:黄绍斌
* 日期:2007.05.24
****************************************************************************************/
#include  "config.h"

extern uint8  GetAKey(void);    	// 声明外部函数(按键函数)
extern void   Disp_BkPic(void);		// 显示背景函数


static MENU_CLASS  menu_class[3];  // 用于保存3级菜单句柄地址和所选的子菜单项,menu_class[0]的菜单句柄地址一般固定指向主菜单。
static uint8  menu_class_no;       // 当前菜单级别。3级菜单时,值为0--2。
 
 
MENUICO  g_disp_buf; 
 
/****************************************************************************
* 名称:GUI_MenuIcoDrawA()
* 功能:根据ico(MENUICO类型)的数据显示图标菜单。
* 入口参数:ico			单个图标菜单数据
*           sel			为0时表示非选中,为1时表示选中
* 出口参数:无
****************************************************************************/
void  GUI_MenuIcoDrawA(MENUICO *ico, uint8 sel)
{	g_disp_buf.x = ico->x; 
	g_disp_buf.y = ico->y; 
	g_disp_buf.icodat = ico->icodat; 	
	g_disp_buf.title = ico->title; 
	g_disp_buf.state = sel; 
	GUI_MenuIcoDraw(&g_disp_buf);
}
 
 
 
/****************************************************************************
* 名称:GUI_ICOMenuSelect()
* 功能:当前级别的菜单显示及选择菜单
* 入口参数:sel_menu		菜单数据(MY_MENU数组)
*           sel_no			默认选中项
* 出口参数:返回选中项的MY_MENU.ret_no返回值
****************************************************************************/
uint8  GUI_ICOMenuSelect(MY_MENU sel_menu[], uint8 sel_no)
{   uint8   key;
    uint8   i;

	/* 清除上一次的菜单 */
	GUI_RectangleFill(142,0, 239,319, WHITE); 		// **** 要根据图标菜单显示位置修改 ****

    /* 显示各菜单项(默认选项要反色显示) */
	for(i=0; i<5; i++)
	{	if(sel_menu[i].mdata == NULL) break;
	
		if(i == sel_no)
		{	GUI_MenuIcoDrawA(sel_menu[i].mdata, 1);	// 选中此菜单项
		}
		else		
		{	GUI_MenuIcoDrawA(sel_menu[i].mdata, 0);
		}	
	}		
    
    
    /* 进行选择显示操作 */
    while(1)
    {   key = GetAKey();    // 等待一个按键
        
        /* 分析按键,并进行相应的处理 */
        switch(key) 
        {   case KEY_UP:    // 上一菜单项   
                if(sel_no != 0)
                {   GUI_MenuIcoDrawA(sel_menu[sel_no].mdata, 0);		// 取得当前菜单项     
                    sel_no--;   // 选择下一菜单项
                    GUI_MenuIcoDrawA(sel_menu[sel_no].mdata, 1);  		// 反色显示新的选项
                }
                break;
            
            case KEY_DOWN:  // 下一菜单项
                if(sel_no < 5) 
                {   i = sel_no + 1;
                    if(sel_menu[i].mdata != NULL)  // 判断下一个菜单项是否有效
                    {   GUI_MenuIcoDrawA(sel_menu[sel_no].mdata, 0);	// 取得当前菜单项                                  
                        sel_no++; 
                        GUI_MenuIcoDrawA(sel_menu[sel_no].mdata, 1);   	// 反色显示新的选项
                    }
                }                
                break;      
            
            case KEY_OK:
                return(sel_menu[sel_no].ret_no);    // 按OK键,返回所选择菜单的指定返回值                              
            
            case KEY_ESC:
                return(RET_MAINMENU);   // 按ESC键,返回第一层菜单
                
        
            default:
                break;
        } // end of switch(key)        
    } // end of while(1)
}




/****************************************************************************
* 名称:GUI_ICOMenuClass3()
* 功能:3级图标菜单选择控制操作函数
* 入口参数:main_menu	菜单模板 (即菜单构造数据)
* 出口参数:无
****************************************************************************/
void  GUI_ICOMenuClass3(MY_MENU  main_menu[])
{   uint8    menu_sel;  // 所选择的菜单返回值
    MY_MENU  *pmenu;    // 菜单句柄指针
    

    /* 参数过滤 */
    if(main_menu==NULL) return;         	// 空菜单结构指针,直接返回
    if(main_menu[0].mdata==NULL) return;	// 第一个菜单项无效,直接返回
    
    
    /* 初始化menu_class[0]和menu_class_no变量 */
    menu_class[0].menu_addr = main_menu;    // 主菜单  
    menu_class[0].sel_no = 0;               // 默认选择菜单项
    menu_class_no = 0;                      // 第一级菜单
    
    Disp_BkPic();		// 显示背景图片
    
    while(1)
    {   /* 菜单显示,选择菜单 */
        menu_sel = GUI_ICOMenuSelect( menu_class[menu_class_no].menu_addr,   // 菜单结构句柄,如MAIN_MENU
                                      menu_class[menu_class_no].sel_no );    // 默认选择菜单项(序号)
        
        /* 对菜单所选值进行处理 */
        switch(menu_sel)
        {   case RET_MAINMENU:  // 直接返回第一层菜单
                menu_class_no = 0; 
                break;
                
            case RET_UPMENU:    // 返回上一层菜单
                if(menu_class_no==0)
                {   return;     // 若是在第一层菜单中返回,则退出GUI_ICOMenuClass3
                }
                else
                {   menu_class_no--;
                }                
                break;
                
            case 0:             // 常规菜单(0--5)选择,则判断是否要运行程序或进入下一级菜单
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                pmenu = menu_class[menu_class_no].menu_addr + menu_sel; // 取得当前选择项的MY_MENU句柄(地址),如"&main_menu[menu_sel]"
                if(pmenu->next_menu != NULL)    // 若有下一级菜单,则进入下一级菜单
                {   if(menu_class_no<2)         // 最大为3级菜单
                    {   menu_class[menu_class_no].sel_no = menu_sel;    // 保存当前级所选菜单序号
                    
                        menu_class_no++;        // 下一级菜单                               
                        menu_class[menu_class_no].menu_addr = pmenu->next_menu; // 设置下一级菜单菜单结构句柄
                        menu_class[menu_class_no].sel_no = 0;           // 默认选择菜单项(序号)
                    }
                }
                else    // 执行相应的功能                    
                {   if(pmenu->mdata->Function != NULL) 
                    {   GUI_FillSCR(WHITE);   							// 清屏
                        (*pmenu->mdata->Function)();               		// 调用菜单项指定的功能函数
                        menu_class[menu_class_no].sel_no = menu_sel;    // 设置新的选择菜单项(序号)
                        
                        Disp_BkPic();	// 显示背景图片
                    }                   
                }                
                
            default:
                break;                    
        } // end of switch(menu_sel)        
    
    } // end of  while(1)
}

⌨️ 快捷键说明

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