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

📄 menu.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 4 页
字号:
#endif //SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS            }            else            {                //Check if there is any enabled items for "Down" action.                bCount = _MENU_GetCountForDownItem(_pMENUCurrentMenu[hMenu], _Cursor[hMenu].bMainMenuIndex);                if (bCount == 0)                {#ifndef SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS                    return MENU_ACTION_EXCEED_DOWN_MAIN_MENU;#else                    _MENU_GoToMainMenuItem(hMenu, MENU_FIRST_ITEM);                    return MENU_ACTION_UP_MAIN_MENU;#endif //SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS                                    }                                //Clear current sub-menu.                MENU_ClearMenuBackground(MENU_SUB_MENU, hMenu);                //if ((_Cursor[hMenu].bMainMenuIndex-_MainMenuDisplay[hMenu].bStartDrawItem+1) >= _MainMenuDisplay[hMenu].bMaxVisibleItem)                if ((_Cursor[hMenu].bMainMenuIndex-_MainMenuDisplay[hMenu].bStartDrawItem+bCount) >= _MainMenuDisplay[hMenu].bMaxVisibleItem)                {                    //scroll down                    _Cursor[hMenu].bMainMenuIndex += bCount;                    //_MainMenuDisplay[hMenu].bStartDrawItem += bCount;                    _MainMenuDisplay[hMenu].bStartDrawItem = _Cursor[hMenu].bMainMenuIndex-_MainMenuDisplay[hMenu].bMaxVisibleItem+1;                    _MainMenuDisplay[hMenu].bDownMark = TRUE;                                        //Note: Must clear the "Down" region before re-draw the sub menu.                    if ((_MainMenuDisplay[hMenu].bStartDrawItem+_MainMenuDisplay[hMenu].bMaxVisibleItem) == _pMENUCurrentMenu[hMenu]->bTotalItem)                    {                        //Clear "Down" mark                        _MENU_ClearUpDownArrowBackground(MENU_MAIN_MENU, hMenu, MENU_ARROW_TYPE_DOWN);                        _MainMenuDisplay[hMenu].bDownMark = FALSE;                    }                                        if (_MainMenuDisplay[hMenu].bStartDrawItem != 0)                    {                        _MainMenuDisplay[hMenu].bUpMark = TRUE;                    }                                        _MENU_ShowMainMenu(hMenu);                }                else                {                    //Update the cursor                    MENU_UpdateCursor(hMenu, CURSOR_STYLE_CLEAR);                                    _Cursor[hMenu].bMainMenuIndex += bCount;                }                MENU_UpdateCursor(hMenu, CURSOR_STYLE_NORMAL);                _pMENUSubMenu[hMenu] = _pMENUCurrentMenu[hMenu]->pMenuItem[_Cursor[hMenu].bMainMenuIndex].pSubMenu;                                //Show sub-menu                if ((_pMENUSubMenu[hMenu] != NULL) && (_pMENUSubMenu[hMenu]->bTotalItem != 0))                {                    _pMENUSubMenu[hMenu] = (PMENU)(_pMENUCurrentMenu[hMenu]->pMenuItem[_Cursor[hMenu].bMainMenuIndex].pSubMenu);                    _MENU_SetSubMenuInitialDisplay(hMenu);                    _Cursor[hMenu].bSubMenuIndex = _pMENUSubMenu[hMenu]->bDefaultCursorPos;                    _MENU_ShowSubMenu(hMenu);                }                return MENU_ACTION_DOWN_MAIN_MENU;            }        }        else if (_Cursor[hMenu].bPos == MENU_SUB_MENU)        {            if (_Cursor[hMenu].bSubMenuIndex == (_pMENUSubMenu[hMenu]->bTotalItem-1))            {#ifndef SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS                return MENU_ACTION_EXCEED_DOWN_SUB_MENU;#else                _MENU_GoToSubMenuItem(hMenu, MENU_FIRST_ITEM);                return MENU_ACTION_DOWN_SUB_MENU;#endif //SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS            }            else            {                bCount = _MENU_GetCountForDownItem(_pMENUSubMenu[hMenu], _Cursor[hMenu].bSubMenuIndex);                if (bCount == 0)                {#ifndef SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS                    return MENU_ACTION_EXCEED_DOWN_SUB_MENU;#else                    _MENU_GoToSubMenuItem(hMenu, MENU_FIRST_ITEM);                    return MENU_ACTION_DOWN_SUB_MENU;#endif //SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS                                    }                                if ((_Cursor[hMenu].bSubMenuIndex-_SubMenuDisplay[hMenu].bStartDrawItem+bCount) >= _SubMenuDisplay[hMenu].bMaxVisibleItem)                {                    //scroll down                    _Cursor[hMenu].bSubMenuIndex += bCount;                    _SubMenuDisplay[hMenu].bStartDrawItem++;                    _SubMenuDisplay[hMenu].bDownMark = TRUE;                                        //Note: Must clear the "Down" region before re-draw the sub menu.                    if ((_SubMenuDisplay[hMenu].bStartDrawItem+_SubMenuDisplay[hMenu].bMaxVisibleItem) == _pMENUSubMenu[hMenu]->bTotalItem)                    {                        //Clear "Down" mark                        _MENU_ClearUpDownArrowBackground(MENU_SUB_MENU, hMenu, MENU_ARROW_TYPE_DOWN);                        _SubMenuDisplay[hMenu].bDownMark = FALSE;                    }                    if (_SubMenuDisplay[hMenu].bStartDrawItem != 0)                    {                        _SubMenuDisplay[hMenu].bUpMark = TRUE;                    }                                        _MENU_ShowSubMenu(hMenu);                }                else                {                    //Update the cursor                    MENU_UpdateCursor(hMenu, CURSOR_STYLE_CLEAR);                                    _Cursor[hMenu].bSubMenuIndex += bCount;                }                MENU_UpdateCursor(hMenu, CURSOR_STYLE_NORMAL);                return MENU_ACTION_DOWN_SUB_MENU;            }        }        break;    case KEY_PLAY:    case KEY_ENTER:        if (_Cursor[hMenu].bPos == MENU_MAIN_MENU)        {            if (_pMENUSubMenu[hMenu] != NULL)            {				if (_pMENUSubMenu[hMenu]->bTotalItem != 0) //to prevent go to a "no item" sub-menu.				{					MENU_UpdateCursor(hMenu, CURSOR_STYLE_GRAYED);                										//update the cursor to the sub-menu					_Cursor[hMenu].bPos = MENU_SUB_MENU;					MENU_UpdateCursor(hMenu, CURSOR_STYLE_NORMAL);				}            }            else            {                //return the ID to do exact action.                return ((((DWORD)MENU_ACTION_PROCESS_MENU_ITEM) << 16) | _pMENUCurrentMenu[hMenu]->pMenuItem[_Cursor[hMenu].bMainMenuIndex].bID);            }        }        else if (_Cursor[hMenu].bPos == MENU_SUB_MENU)        {            if (_pMENUSubMenu[hMenu]->bCheckMenuItemPos != MENU_ITEM_NO_CHECKED_ITEM) //CoCo2.38            {                _pMENUSubMenu[hMenu]->bCheckMenuItemPos = _Cursor[hMenu].bSubMenuIndex;                _pMENUSubMenu[hMenu]->bDefaultCursorPos = _pMENUSubMenu[hMenu]->bCheckMenuItemPos;            }            printf("\n go to menu processkey menu sub menu");            //Recover the cursor to normal state in the sub-menu and re-draw the check item.            _MENU_ShowSubMenu(hMenu);            //Return to main menu            _Cursor[hMenu].bPos = MENU_MAIN_MENU;            MENU_UpdateCursor(hMenu, CURSOR_STYLE_NORMAL);                                                      if (_pMENUSubMenu[hMenu]->bMenuType == MENU_TYPE_NUM)            {                return (MENU_ACTION_PROCESS_NUN_ITEM) | (((DWORD)(_pMENUCurrentMenu[hMenu]->pMenuItem[_Cursor[hMenu].bMainMenuIndex].bID)) << 16) | _Cursor[hMenu].bSubMenuIndex;            }            else            {                return (((DWORD)MENU_ACTION_PROCESS_MENU_ITEM << 16) | _pMENUSubMenu[hMenu]->pMenuItem[(_Cursor[hMenu].bSubMenuIndex)].bID);                            }        }        break;    default:        break;    }    return MENU_ACTION_NONE;}//***************************************************************************//  Function    :   MENU_DeleteMenu//  Abstract    :   //  Arguments   :   none.//  Return      :   //  Side Effect :   none.//  Notes       :   //***************************************************************************void MENU_DeleteMenu(HMENU hMenu, BYTE bClearBackground){    //clear menu    if (_pMENUCurrentMenu[hMenu] != NULL)    {        if (bClearBackground)        {            MENU_ClearMenuBackground(MENU_MAIN_MENU, hMenu);        }    }    if (_pMENUSubMenu[hMenu] != NULL)    {        if (bClearBackground)        {            MENU_ClearMenuBackground(MENU_SUB_MENU, hMenu);        }    }    _pMENUCurrentMenu[hMenu] = NULL;    _pMENUSubMenu[hMenu] = NULL;    _hMenuStack[hMenu] = MENU_HANDLE_FREE;}HMENU _MENU_GetMenuHandle(void){    BYTE i;    for (i = 0; i < MAX_SUPPORT_MENU_HANDLE_NUM; i++)    {        if (_hMenuStack[i] == MENU_HANDLE_FREE)        {            _hMenuStack[i] = i;            return _hMenuStack[i];        }    }    return MENU_HANDLE_INVALID;}WORD _MENU_GetMenuWidth(MENU *pMenu){    BYTE bItemIndex;    WORD wMaxWidth = 0;    WORD wStringWidth;    if (pMenu == NULL)        return 0;        if (pMenu->wWidth != MENU_WIDTH_OPTIMIZED)        return pMenu->wWidth;    for (bItemIndex = 0; bItemIndex < pMenu->bTotalItem; bItemIndex++)    {                if (pMenu->bMenuType == MENU_TYPE_NUM)        {            OSDUTL_PrepareOutputString();            OSDUTL_OutputNumFromIndex(pMenu->wStartNum+bItemIndex);            wStringWidth = GDI_GetStringWidth_909(__pOSDUTLOutputString);            if (wMaxWidth < wStringWidth)                wMaxWidth = wStringWidth;        }        else        {            wStringWidth = GDI_GetStringWidth_909(pMenu->pMenuItem[bItemIndex].pwItemText);                        if (wMaxWidth < wStringWidth)                wMaxWidth = wStringWidth;        }    }    wMaxWidth += MENU_STRING_DISTANCE_H*2;    if (pMenu->bCheckMenuItemPos != MENU_ITEM_NO_CHECKED_ITEM)    {        wMaxWidth += GDI_GetStringWidth_909(aMENUCheckSymbol);        wMaxWidth += MENU_CHECK_SYMBOL_DISTANCE_H;    }    if (_MENU_CheckIfAnyItemHasSubMenu(pMenu))    {        wMaxWidth += GDI_GetStringWidth_909(aMENUSubMenuSymbol);        wMaxWidth += MENU_SUBMENU_SYMBOL_DISTANCE_H;    }    return wMaxWidth;}WORD _MENU_GetStringStartH(BYTE bMenuMode, HMENU hMenu, WORD *pString){    WORD wStringWidth;    WORD wMenuWidth;    MENU *pMenu = NULL;    WORD wStartH;    WORD wCheckSymbolWidth = 0;    WORD wSubMenuSymbolWidth = 0;    PARM_RECT MENURect;    if (bMenuMode == MENU_MAIN_MENU)    {        pMenu = _pMENUCurrentMenu[hMenu];        _MENU_GetMainMenuDisplayRect(hMenu, &MENURect);    }    else if (bMenuMode == MENU_SUB_MENU)    {        pMenu = _pMENUSubMenu[hMenu];        _MENU_GetSubMenuDisplayRect(hMenu, &MENURect);    }    wMenuWidth = _MENU_GetMenuWidth(pMenu);    wStringWidth = GDI_GetStringWidth_909(pString);    wStartH = MENURect.rect.wLeft+MENU_STRING_DISTANCE_H;    if (pMenu->bCheckMenuItemPos != MENU_ITEM_NO_CHECKED_ITEM)    {        wCheckSymbolWidth = GDI_GetStringWidth_909(aMENUCheckSymbol) + MENU_CHECK_SYMBOL_DISTANCE_H;    }    if (_MENU_CheckIfAnyItemHasSubMenu(pMenu))    {        wSubMenuSymbolWidth = GDI_GetStringWidth_909(aMENUSubMenuSymbol)+MENU_SUBMENU_SYMBOL_DISTANCE_H;    }    switch (pMenu->bAlignment)    {    case MENU_ITEM_ALIGNMENT_CENTER:        wStartH = wStartH+wCheckSymbolWidth+((wMenuWidth-wCheckSymbolWidth-wSubMenuSymbolWidth-MENU_STRING_DISTANCE_H*2-wStringWidth)>>1);                        break;    case MENU_ITEM_ALIGNMENT_RIGHT:        wStartH = MENURect.rect.wLeft+wMenuWidth-MENU_STRING_DISTANCE_H-wSubMenuSymbolWidth-wStringWidth;        break;    case MENU_ITEM_ALIGNMENT_LEFT:        wStartH += wCheckSymbolWidth;        break;    default:        break;    }    return wStartH;}void MENU_UpdateCursor(HMENU hMenu, BYTE bCursorStyle){    PARM_RECT MENURect;    PARM_DRAW_STRING MENUStringAttr;    MENU *pMenu;    BYTE bCursorIndex;    if (_Cursor[hMenu].bPos == MENU_MAIN_MENU)    {        pMenu = _pMENUCurrentMenu[hMenu];        bCursorIndex = _Cursor[hMenu].bMainMenuIndex;        MENURect.rect.wLeft = pMenu->wStartX;        MENURect.rect.wTop = pMenu->wStartY+(bCursorIndex-_MainMenuDisplay[hMenu].bStartDrawItem)*MENU_ITEM_HEIGHT+MENU_STRING_DISTANCE_V;    }    else if (_Cursor[hMenu].bPos == MENU_SUB_MENU)    {        pMenu = _pMENUSubMenu[hMenu];        bCursorIndex = _Cursor[hMenu].bSubMenuIndex;        MENURect.rect.wLeft = _MENU_GetSubMenuNormalStartH(hMenu);        MENURect.rect.wTop = _MENU_GetSubMenuNormalStartV(hMenu)+(bCursorIndex-_SubMenuDisplay[hMenu].bStartDrawItem)*MENU_ITEM_HEIGHT+MENU_STRING_DISTANCE_V;            }    else        return;    //Draw the cursor    if (bCursorStyle == CURSOR_STYLE_NORMAL)    {        MENURect.bColor = MENU_PALETTE_ENTRY_HIGHLIGHT;    }    else if (bCursorStyle == CURSOR_STYLE_CLEAR)    {        MENURect.bColor = MENU_PALETTE_ENTRY_GENERAL_BACKGROUND;    }    else if (bCursorStyle == CURSOR_STYLE_GRAYED)    {        MENURect.bColor = MENU_PALETTE_ENTRY_CURSOR_GRAYED;    }    MENURect.rect.wRight = MENURect.rect.wLeft + _MENU_GetMenuWidth(pMenu) - 1;    MENURect.rect.wBottom = MENURect.rect.wTop+MENU_ITEM_HEIGHT-1;         GDI_FillRect(0, &MENURect);    //Draw the menu item string    MENUStringAttr.bTextColor = MENU_PALETTE_ENTRY_ITEM_TEXT;    MENUStringAttr.bColorKey = 0;    MENUStringAttr.bBackground = MENURect.bColor;         if (pMenu->bMenuType == MENU_TYPE_NUM)    {                    OSDUTL_PrepareOutputString();        OSDUTL_OutputNumFromIndex(pMenu->wStartNum+bCursorIndex);        _MENU_CopyString();                MENUStringAttr.wX = _MENU_GetStringStartH(_Cursor[hMenu].bPos, hMenu, __pOSDUTLOutputString);        MENUStringAttr.wY = MENURect.rect.wTop+((MENU_ITEM_HEIGHT-GDI_GetStringHeight(__pOSDUTLOutputString)) >> 1);                GDI_DrawString_909(0, &MENUStringAttr, __wMENUStringBuf);    }    else    {                                MENUStringAttr.wX = _MENU_GetStringStartH(_Cursor[hMenu].bPos, hMenu, pMenu->pMenuItem[bCursorIndex].pwItemText);                        MENUStringAttr.wY = MENURect.rect.wTop+((MENU_ITEM_HEIGHT-GDI_GetStringHeight(pMenu->pMenuItem[bCursorIndex].pwItemText)) >> 1);        GDI_DrawString_909(0, &MENUStringAttr, pMenu->pMenuItem[bCursorIndex].pwItemText);    }    //Draw Check symbol    if (_Cursor[hMenu].bPos == MENU_SUB_MENU)    {        if (pMenu->bCheckMenuItemPos != MENU_ITEM_NO_CHECKED_ITEM)        {            if (bCursorIndex == pMenu->bCheckMenuItemPos)            {                MENUStringAttr.wX = MENURect.rect.wLeft + MENU_STRING_DISTANCE_H;                MENUStringAttr.wY = MENURect.rect.wTop+((MENU_ITEM_HEIGHT-GDI_GetStringHeight(aMENUCheckSymbol)) >> 1);                GDI_DrawString_909(0, &MENUStringAttr, aMENUCheckSymbol);            }        }    }    if (_Cursor[hMenu].bPos == MENU_MAIN_MENU)    {        if (pMenu->pMenuItem[bCursorIndex].pSubMenu != NULL)        {            MENUStringAttr.wX = MENURect.rect.wRight-MENU_STRING_DISTANCE_H-GDI_GetStringWidth_909(aMENUSubMenuSymbol);            MENUStringAttr.wY = MENURect.rect.wTop+((MENU_ITEM_HEIGHT-GDI_GetStringHeight(aMENUSubMenuSymbol)) >> 1);           GDI_DrawString_909(0, &MENUStringAttr, aMENUSubMenuSymbol);        }    }}void _MENU_ShowSubMenu(HMENU hMenu){    BYTE bCount = 0;    BYTE bMenuIndex;    PARM_RECT MENURect;    PARM_DRAW_STRING MENUStringAttr;    WORD wMenuWidth;    BYTE bDisplayItemNum;    if (_pMENUSubMenu[hMenu] != NULL)    {              //CoCo1.13        if (_pMENUSubMenu[hMenu]->pMenuItem[_Cursor[hMenu].bSubMenuIndex].bAttribute == MENU_ITEM_STATE_DISABLE)        {            bCount = _MENU_GetCountForDownItem(_pMENUSubMenu[hMenu], _Cursor[hMenu].bSubMenuIndex);

⌨️ 快捷键说明

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