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

📄 menu_121.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 5 页
字号:
#include "winav.h"#ifdef SUPPORT_STB#include "dvbcustm.h"#endif
#include "gdi.h"
#include "fontindex.h"#include "utl.h"#include "osddsply.h"#include "osdnd.h"#include "input.h"#include "menu.h"
MENU *_pMENUCurrentMenu[MAX_SUPPORT_MENU_HANDLE_NUM];MENU *_pMENUSubMenu[MAX_SUPPORT_MENU_HANDLE_NUM];HMENU _hMenuStack[MAX_SUPPORT_MENU_HANDLE_NUM] = {MENU_HANDLE_FREE, MENU_HANDLE_FREE, MENU_HANDLE_FREE, MENU_HANDLE_FREE, MENU_HANDLE_FREE};CURSOR _Cursor[MAX_SUPPORT_MENU_HANDLE_NUM];MENU_DISPLAY _MainMenuDisplay[MAX_SUPPORT_MENU_HANDLE_NUM];MENU_DISPLAY _SubMenuDisplay[MAX_SUPPORT_MENU_HANDLE_NUM];BYTE _bMENUBackgroundColor[MAX_SUPPORT_MENU_HANDLE_NUM];WORD aMENUUpArrowSymbol[] = {1, CHAR_N_UP_16};WORD aMENUDownArrowSymbol[] = {1, CHAR_N_DWN_16};WORD aMENUCheckSymbol[] = {1, CHAR_N_CHECK};WORD aMENUSubMenuSymbol[] = {1, CHAR_N_SUBMENU};WORD __wMENUStringBuf[OSDUTL_STRING_LENGTH+1];
BYTE *_bMENUExitKey[MAX_SUPPORT_MENU_HANDLE_NUM];
//***************************************************************************//  Function    :   _MENU_InitializeGDI//  Abstract    :   Initialize the palette, etc.//  Arguments   :   none.//  Return      :   none.//  Side Effect :   none.//  Notes       :   //***************************************************************************void _MENU_InitializeGDI(void){    GDI_ChangePALEntry(MENU_PALETTE_ENTRY_GENERAL_BACKGROUND, MENU_PALETTE_COLOR_GENERAL_BACKGROUND, FALSE);    GDI_ChangePALEntry(MENU_PALETTE_ENTRY_NORMAL_FRAME_BRIGHT, MENU_PALETTE_COLOR_NORMAL_FRAME_BRIGHT, FALSE);    GDI_ChangePALEntry(MENU_PALETTE_ENTRY_NORMAL_FRAME_DARK, MENU_PALETTE_COLOR_NORMAL_FRAME_DARK, FALSE);    GDI_ChangePALEntry(MENU_PALETTE_ENTRY_NORMAL_FRAME_CENTER, MENU_PALETTE_COLOR_NORMAL_FRAME_CENTER, FALSE);    GDI_ChangePALEntry(MENU_PALETTE_ENTRY_HIGHLIGHT, MENU_PALETTE_COLOR_HIGHLIGHT, FALSE);    GDI_ChangePALEntry(MENU_PALETTE_ENTRY_ITEM_TEXT, MENU_PALETTE_COLOR_ITEM_TEXT, FALSE);    GDI_ChangePALEntry(MENU_PALETTE_ENTRY_CURSOR_GRAYED, MENU_PALETTE_COLOR_CURSOR_GRAYED, FALSE);    GDI_ChangePALEntry(MENU_PALETTE_ENTRY_ITEM_GRAYED, MENU_PALETTE_COLOR_ITEM_GRAYED, FALSE);    GDI_WaitPaletteComplete();}HMENU MENU_CreateMenu(MENU *pMenu, BYTE bMaxVisibleItem, BYTE *bExitKey){    HMENU hMenu;    hMenu = _MENU_GetMenuHandle();    if (hMenu != MENU_HANDLE_INVALID)    {        _pMENUCurrentMenu[hMenu] = pMenu;        _pMENUSubMenu[hMenu] = (PMENU)(pMenu->pMenuItem[pMenu->bDefaultCursorPos].pSubMenu);        //Set the cursor's position        _Cursor[hMenu].bMainMenuIndex = _pMENUCurrentMenu[hMenu]->bDefaultCursorPos;        _Cursor[hMenu].bPos = MENU_MAIN_MENU;        if (_pMENUSubMenu[hMenu] == NULL)        {            _Cursor[hMenu].bSubMenuIndex = CURSOR_POS_INVALID;        }        else        {            _Cursor[hMenu].bSubMenuIndex = _pMENUSubMenu[hMenu]->bDefaultCursorPos;        }        //Set the menu display attribute        _MainMenuDisplay[hMenu].bMaxVisibleItem = bMaxVisibleItem;        _SubMenuDisplay[hMenu].bMaxVisibleItem = bMaxVisibleItem;        //Main menu has "Up" mark?        _MENU_SetMainMenuInitialDisplay(hMenu);        if (_pMENUSubMenu[hMenu] != NULL)        {            //Sub-menu has "Up" mark?            _MENU_SetSubMenuInitialDisplay(hMenu);        }

		_bMENUExitKey[hMenu] = bExitKey;
    }        return hMenu;}void MENU_ShowMenu(HMENU hMenu, BYTE bActive, BYTE bMenuBackgroundColor){       _MENU_InitializeGDI();    _bMENUBackgroundColor[hMenu] = bMenuBackgroundColor;    //draw main-menu    _MENU_ShowMainMenu(hMenu);        if (bActive)    {
        MENU_SetMenuState(hMenu, TRUE);
    }}void MENU_SetMenuState(HMENU hMenu, BYTE bActive){
    if (MENU_AllDisableItems(hMenu))
        return;
    if (bActive)    {
        if (_MENU_CheckMainMenuCursorState(hMenu) == TRUE)
        {
            //draw sub-menu            _MENU_ShowSubMenu(hMenu);
        }                //Update the cursor        MENU_UpdateCursor(hMenu, CURSOR_STYLE_NORMAL); 
    }    else        {        //Clear current sub-menu.        MENU_ClearMenuBackground(MENU_SUB_MENU, hMenu);        //Update the cursor        MENU_UpdateCursor(hMenu, CURSOR_STYLE_CLEAR);     }}void MENU_SetMenuItemState(HMENU hMenu, BYTE bMenuIndex, BYTE bEnable){    PARM_DRAW_STRING MENUStringAttr;    PARM_RECT MENURect;    _MENU_GetMainMenuDisplayRect(hMenu, &MENURect);    _pMENUCurrentMenu[hMenu]->pMenuItem[bMenuIndex].bAttribute = bEnable;

    if (bMenuIndex < _MainMenuDisplay[hMenu].bStartDrawItem)
    {
        return;
    }
    else if ((bMenuIndex-_MainMenuDisplay[hMenu].bStartDrawItem) >= (_SubMenuDisplay[hMenu].bStartDrawItem+_MainMenuDisplay[hMenu].bMaxVisibleItem))
    {
        return;  
    }    //re-draw the menu.    MENUStringAttr.bBackground = MENU_PALETTE_ENTRY_GENERAL_BACKGROUND; //PAL_ENTRY_COLOR_TRANSPARENT; //Set the color of background is the same as color key.    MENUStringAttr.bColorKey = 0;    MENUStringAttr.bShadow1 = PAL_ENTRY_COLOR_TRANSPARENT;    MENUStringAttr.bShadow2 = PAL_ENTRY_COLOR_TRANSPARENT;    MENUStringAttr.wX = _pMENUCurrentMenu[hMenu]->wStartX+MENU_STRING_DISTANCE_H;    MENUStringAttr.wY = _pMENUCurrentMenu[hMenu]->wStartY + MENU_STRING_DISTANCE_V+(bMenuIndex-_MainMenuDisplay[hMenu].bStartDrawItem)*MENU_ITEM_HEIGHT;    if (bEnable == MENU_ITEM_STATE_DISABLE)    {        //Set the color of the string to be disabled color        MENUStringAttr.bTextColor = MENU_PALETTE_ENTRY_ITEM_GRAYED;    }    else    {        //Set the color of the string to be enabled color        MENUStringAttr.bTextColor = MENU_PALETTE_ENTRY_ITEM_TEXT;    }    GDI_DrawString_909(0, &MENUStringAttr, _pMENUCurrentMenu[hMenu]->pMenuItem[bMenuIndex].pwItemText);    if (_pMENUCurrentMenu[hMenu]->pMenuItem[bMenuIndex].pSubMenu != NULL)    {        MENUStringAttr.wX = MENURect.rect.wRight-MENU_STRING_DISTANCE_H-GDI_GetStringWidth_909(aMENUSubMenuSymbol);        MENUStringAttr.wY = _pMENUCurrentMenu[hMenu]->wStartY+MENU_STRING_DISTANCE_V+(bMenuIndex-_MainMenuDisplay[hMenu].bStartDrawItem)*MENU_ITEM_HEIGHT+((MENU_ITEM_HEIGHT-GDI_GetStringHeight(aMENUSubMenuSymbol)) >> 1);        GDI_DrawString_909(0, &MENUStringAttr, aMENUSubMenuSymbol);    }}//***************************************************************************//  Function    :   MENU_Processkey//  Abstract    :   //  Arguments   :   none.//  Return      :   //  Side Effect :   none.//  Notes       :   //***************************************************************************DWORD MENU_ProcessKey(HMENU hMenu, BYTE bKey){    BYTE bCount;
	BYTE bExitIndex;    if (_pMENUCurrentMenu[hMenu] == NULL)        return MENU_ACTION_NONE;
	if (_bMENUExitKey[hMenu] != NULL)
	{
        if (_Cursor[hMenu].bPos == MENU_MAIN_MENU)
		{
			for (bExitIndex = 0; bExitIndex < sizeof(_bMENUExitKey[hMenu])/sizeof(BYTE); bExitIndex++)
			{
				if (bKey == _bMENUExitKey[hMenu][bExitIndex])
				{
					if ((bKey != KEY_UP) && (bKey != KEY_DOWN) && (bKey != KEY_RIGHT))
					{
						MENU_SetMenuState(hMenu, FALSE);
						return (((DWORD)MENU_ACTION_EXIT) << 16);
					}
#ifndef SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS
					else if ((bKey == KEY_UP) && (_Cursor[hMenu].bMainMenuIndex == 0))
					{
						MENU_SetMenuState(hMenu, FALSE);
						return (((DWORD)MENU_ACTION_EXIT) << 16);
					}
#endif //SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS
				}
			}
		}
	}
    //Return the ID of the menu item. The control flow can do the exact action according to the ID.    switch (bKey)    {    case KEY_LEFT:
		/*#ifndef NO_TOOLBAR_SETUP_MENU		        if (_Cursor[hMenu].bPos == MENU_MAIN_MENU)        {            MENU_SetMenuState(hMenu, FALSE);            return (((DWORD)MENU_ACTION_EXIT) << 16);        }
        else if (_Cursor[hMenu].bPos == MENU_SUB_MENU)        {            //return to the main menu            MENU_UpdateCursor(hMenu, CURSOR_STYLE_CLEAR);                          _Cursor[hMenu].bPos = MENU_MAIN_MENU;            MENU_UpdateCursor(hMenu, CURSOR_STYLE_NORMAL);                      }#else //NO_TOOLBAR_SETUP_MENU        if (_Cursor[hMenu].bPos == MENU_SUB_MENU)        {            //return to the main menu            MENU_UpdateCursor(hMenu, CURSOR_STYLE_CLEAR);                          _Cursor[hMenu].bPos = MENU_MAIN_MENU;            MENU_UpdateCursor(hMenu, CURSOR_STYLE_NORMAL);                      }#endif //NO_TOOLBAR_SETUP_MENU
		*/

        if (_Cursor[hMenu].bPos == MENU_SUB_MENU)
        {
            //return to the main menu
            MENU_UpdateCursor(hMenu, CURSOR_STYLE_CLEAR);              
            _Cursor[hMenu].bPos = MENU_MAIN_MENU;
            MENU_UpdateCursor(hMenu, CURSOR_STYLE_NORMAL);              
        }        break;    case KEY_RIGHT:        if (_Cursor[hMenu].bPos == MENU_MAIN_MENU)        {            if (_pMENUSubMenu[hMenu] != NULL)            {
				if ((_pMENUSubMenu[hMenu]->bTotalItem != 0) && (!_MENU_AllDisableSubItems(hMenu))) //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); 
				}            }        }        break;            case KEY_UP:        if (_Cursor[hMenu].bPos == MENU_MAIN_MENU)        {            if (_Cursor[hMenu].bMainMenuIndex == 0)            {
#ifndef SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS                return MENU_ACTION_EXCEED_UP_MAIN_MENU;
#else

                _MENU_GoToMainMenuItem(hMenu, MENU_LAST_ITEM);
                return MENU_ACTION_UP_MAIN_MENU;

#endif //SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS            }            else            {                //Check if there is any enabled items for "up" action.                bCount = _MENU_GetCountForUpItem(_pMENUCurrentMenu[hMenu], _Cursor[hMenu].bMainMenuIndex);                if (bCount == 0)                {
#ifndef SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS                    return MENU_ACTION_EXCEED_UP_MAIN_MENU;
#else
                    _MENU_GoToMainMenuItem(hMenu, MENU_LAST_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-1) < _MainMenuDisplay[hMenu].bStartDrawItem)                if ((_Cursor[hMenu].bMainMenuIndex-bCount) < _MainMenuDisplay[hMenu].bStartDrawItem)                {                                                   //scroll up                    _Cursor[hMenu].bMainMenuIndex -= bCount;

                    if (_MainMenuDisplay[hMenu].bStartDrawItem >= bCount)
                    {                        _MainMenuDisplay[hMenu].bStartDrawItem -= bCount;
                    }
                    else
                    {
                        _MainMenuDisplay[hMenu].bStartDrawItem = 0;
                    }                                        //Note: Must clear the "up" region before re-draw the sub menu.                    if (_MainMenuDisplay[hMenu].bStartDrawItem == 0)                    {                        //Clear "Up" mark                        _MENU_ClearUpDownArrowBackground(MENU_MAIN_MENU, hMenu, MENU_ARROW_TYPE_UP);                        _MainMenuDisplay[hMenu].bUpMark = FALSE;
                    }                                        if ((_MainMenuDisplay[hMenu].bStartDrawItem+_MainMenuDisplay[hMenu].bMaxVisibleItem) < _pMENUCurrentMenu[hMenu]->bTotalItem)                    {                        _MainMenuDisplay[hMenu].bDownMark = 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))                {

⌨️ 快捷键说明

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