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

📄 menutop.c

📁 一个占用内存极少的菜单系统的实现
💻 C
📖 第 1 页 / 共 2 页
字号:
        GUI_DispCharAt(' ',BarXOffset,(Where--)*BarYSize+BarYOffset);
        GUI_DispCharAt('>',BarXOffset,Where*BarYSize+BarYOffset);
#else
        //原来位置取消反显   项是ItemBack  位置Where
        BarDisp(*(DispItem+ItemBack),BarXOffset,(Where--)*BarYSize+BarYOffset,0);
        //上移后的位置反显   项是Item      位置Where-1 (Where--实现)
        BarDisp(*(DispItem+Item),BarXOffset,Where*BarYSize+BarYOffset,1);//高亮显示
#endif

#ifdef RockBack
    } else {//当前位置为0,     顶部  上移  需要刷新全部子菜单项显示   //1.回滚方式,到了顶部后回滚到底部
    #ifdef DynamicBar
        if ((ItemNum > DispMax)||(BarDataMode == DynamicData)){//需要显示的Bar多于单屏可以显示的Bar,那么重新显示//08/29
    #else
        if (ItemNum > DispMax) {//需要显示的Bar多于单屏可以显示的Bar,那么重新显示
    #endif
#else
    }else if(ItemBack != 0){
        if (ItemNum > DispMax) {//需要显示的Bar多于单屏可以显示的Bar,那么重新显示全部
#endif

            Menu_j = Item;
            Menu_i = 0;
            //项是 Item 位置 0
            BarDisp(*(DispItem+Menu_j),BarXOffset,Menu_i*BarYSize+BarYOffset,1);
            if (Menu_j == (ItemNum-1)) {   //维护Menu_j
                Menu_j=0;
            } else {
                Menu_j++;
            }
            //显示其他项
            for (Menu_i = 1; Menu_i < DispMax; Menu_i++) {
                BarDisp(*(DispItem+Menu_j),BarXOffset,Menu_i*BarYSize+BarYOffset,0);
                if (Menu_j == (ItemNum-1)) {
                    Menu_j=0;
                } else {
                    Menu_j++;
                }
            }
            Where = 0;//当前位置依然在开头的0位置
        } else {//单屏能显示完全部菜单项,"顶部 上移"应当跳转到底部(或者什么都不做)
            //当仅仅只有一项的时候,应当一直在Where=0的地方反显的!!!这里也能实现,因为最后是反显的函数
            Where = ItemNum-1;
            //取消顶部的原有的反显  项ItemBack  位置0
            BarDisp(*(DispItem+ItemBack),BarXOffset,0*BarYSize+BarYOffset,0);
            //反显根部  项Item  位置ItemNum-1
            BarDisp(*(DispItem+Item),BarXOffset,Where*BarYSize+BarYOffset,1);//反显
        }
#ifdef RockBack
    }
#else
    }else{
        Item = ItemBack;//Restore
    }

#endif

    Bar(Item,ItemNum,125,120);                  //维护滚动条
    Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
}
//Bar项菜单向右按键的行为
//维护Bar显示
void BarMenuRight(void)
{
    U8 Menu_i;          //计数变量 在菜单函数中用到
    U8 Menu_j;          //计数变量
    U8 ItemBack;
    ItemBack = Item;
//---维护Item
    if (Item == (ItemNum-1)) {
        Item = 0;
    } else {
        Item++;
    }
//------------
//---维护显示
    if (Where != (DispMin-1)) {//当前位置不为最末,两次反显


#ifdef LessCPUUseage
        /*
        如果是使用">"这样的符号标志当前反显项,那么直接反显该标志好了 2007、1、8
        */
        GUI_SetEnFont(En_8x16);
        GUI_DispCharAt(' ',BarXOffset,(Where++)*BarYSize+BarYOffset);
        GUI_DispCharAt('>',BarXOffset,Where*BarYSize+BarYOffset);
#else
        //原来位置取消反显   项是ItemBack  位置Where
        BarDisp(*(DispItem+ItemBack),BarXOffset,(Where++)*BarYSize+BarYOffset,0);
        //下移后的位置反显   项是Item      位置Where+1(Where++实现)
        BarDisp(*(DispItem+Item),BarXOffset,Where*BarYSize+BarYOffset,1);//反显
#endif

#ifdef RockBack
    } else {    //当前位置为DispMax    底部  下移
    #ifdef DynamicBar
        if ((ItemNum > DispMax)||(BarDataMode == DynamicData)){//需要显示的Bar多于单屏可以显示的Bar,那么重新显示//08/29
    #else
        if (ItemNum > DispMax) {//需要显示的Bar多于单屏可以显示的Bar,那么重新显示
    #endif
#else
    }else if(ItemBack != (ItemNum-1)){//当前位置为DispMax    如果原来显示位置不是最后一项,则 底部  下移
        if (ItemNum > DispMax) {//需要显示的Bar多于单屏可以显示的Bar,那么重新显示
#endif
            Menu_j = Item;
            Menu_i = DispMax;
            //项是 Item  位置是 DispMax
            BarDisp(*(DispItem+Menu_j),BarXOffset,(Menu_i-1)*BarYSize+BarYOffset,1);
            if (Menu_j == 0) {
                Menu_j = ItemNum-1;
            } else {
                Menu_j--;
            }
            //显示其他项
            for (Menu_i = DispMax-1; Menu_i > 0; Menu_i--) {
                BarDisp(*(DispItem+Menu_j),BarXOffset,(Menu_i-1)*BarYSize+BarYOffset,0);
                if (Menu_j == 0) {
                    Menu_j = ItemNum-1;
                } else {
                    Menu_j--;
                }
            }
            Where = DispMax-1;//当前位置依然末尾位置
        } else {//单屏能显示完全部菜单项,"底部 下移"应当跳转到顶部反显(或者什么都不做)
            Where = 0;
            //取消底部原有反显   项ItemBack  位置ItemNum-1
            BarDisp(*(DispItem+ItemBack),BarXOffset,(ItemNum-1)*BarYSize+BarYOffset,0);
            //反显顶部 项Item  位置0
            BarDisp(*(DispItem+Item),BarXOffset,Where*BarYSize+BarYOffset,1);//反显
        }
#ifdef RockBack
    }
#else
    }else{
        Item = ItemBack;//Restore
    }
#endif

    Bar(Item,ItemNum,MenuBarPosX,MenuBarNumPosX);                  //维护滚动条
    Jump2Menu(SelfMenuIndex,FlashMode_NoAction);

}
//*********************************************************


/*
*****************************************************************************
* DispIcoMenuInit - 图标层菜单界面
* DESCRIPTION: -
* 共有5个函数
 DispIcoMenuInit    DispIcoMenuUp   DispIcoMenuDown
 DispIcoMenuLeft    DispIcoMenuRight
* @Return :
*
*****************************************************************************
*/
void DispIcoMenuInit()
{

    ItemNum = IcoMenu[language].TextNum;//多少数据项
    DispItem = IcoMenu[language].Text;  //数据


    GUI_Clear();
//-------------------
    if(Flash == FlashMode_AutoInit){//从0进入,初始化Item等值
        PUSH();
        Item = 0;
        Where = 0;
    }
    GUI_DispStringAtBar(*(DispItem+Item),0,ICO_PosY+ICO_YSize,126,GUI_TA_HCENTER);//菜单名字
    GUI_DrawIcon(icos[Item],ICO_PosX,ICO_PosY);             //图标

    //显示按键对应的文字提示,1-->"进入"
    GUI_DispStringAtBar(*(Tip[language].Text+1),0,Enter_PosY,126,GUI_TA_HCENTER);

    Bar(Item,ItemNum,MenuBarPosX,MenuBarNumPosX);                  //维护滚动条
    return;
}

/*
*****************************************************************************
* DispIcoMenuUp - 图标层下确定键的行为
* DESCRIPTION: -
* 分发处理各个跳转
* 第一层菜单的Up键处理
* Return :
*
*****************************************************************************
*/
void DispIcoMenuUp()
{

    switch(Item){
        case 0:{
            GUI_Clear();
            //功能
            Jump2Menu(MenuFuncIndex,FlashMode_AutoInit);
            return;
        }
        case 1:{
            GUI_Clear();
            //参数
            Jump2Menu(MenuParaIndex,FlashMode_AutoInit);
            return;
        }
        case 2:{
            GUI_Clear();
            //测量
            Jump2Menu(MenuMeasureIndex,FlashMode_AutoInit);
            return;
        }
        case 3:{
            GUI_Clear();
            //语言
            Jump2Menu(MenuLanguageIndex,FlashMode_ManualInit);
            //在MenuLanguage.C中的DispMenuLanguageInit函数中修改Item Where!
            return;
        }
        case 4:{
            Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
            return;
        }
        case 5:{
            Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
            return;
        }
        default:{
            Jump2Menu(MenuTopIndex,FlashMode_NoAction);
            return;
        }
    }

}

void DispIcoMenuDown()
{
    POP();
}

void DispIcoMenuLeft()
{
    if(Item==0){
        Item = ItemNum-1;
    }else{
        Item--;
    }

    GUI_DispStringAtBar(*(DispItem+Item),0,ICO_PosY+ICO_YSize,126,GUI_TA_HCENTER);//菜单名字
    GUI_DrawIcon(icos[Item],ICO_PosX,ICO_PosY);             //图标
    Bar(Item,ItemNum,MenuBarPosX,MenuBarNumPosX);                  //维护滚动条
    Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
}

void DispIcoMenuRight()
{
    if(Item==(ItemNum-1)){
        Item = 0;
    }else{
        Item++;
    }

    GUI_DispStringAtBar(*(DispItem+Item),0,ICO_PosY+ICO_YSize,126,GUI_TA_HCENTER);//菜单名字
    GUI_DrawIcon(icos[Item],ICO_PosX,ICO_PosY);             //图标
    Bar(Item,ItemNum,MenuBarPosX,MenuBarNumPosX);                  //维护滚动条
    Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
}
//---------------------------------------------------------



//---------------------------

void DispBuildTime(void)//编译时间
{

    GUI_DispStringAt("Build Time:",0,0);
    GUI_DispStringAt(__DATE__,0,2);
    GUI_DispStringAt(__TIME__,0,4);
}

⌨️ 快捷键说明

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