📄 menu.c
字号:
void _MENU_SetMainMenuInitialDisplay(HMENU hMenu){ if (_pMENUCurrentMenu[hMenu]->bDefaultCursorPos > (_MainMenuDisplay[hMenu].bMaxVisibleItem-1)) { _MainMenuDisplay[hMenu].bUpMark = TRUE; _MainMenuDisplay[hMenu].bStartDrawItem = _pMENUCurrentMenu[hMenu]->bDefaultCursorPos-_MainMenuDisplay[hMenu].bMaxVisibleItem+1; } else { _MainMenuDisplay[hMenu].bUpMark = FALSE; _MainMenuDisplay[hMenu].bStartDrawItem = 0; } //Main menu has "Down" mark? if ((_MainMenuDisplay[hMenu].bStartDrawItem + _MainMenuDisplay[hMenu].bMaxVisibleItem) < _pMENUCurrentMenu[hMenu]->bTotalItem) { _MainMenuDisplay[hMenu].bDownMark = TRUE; } else { _MainMenuDisplay[hMenu].bDownMark = FALSE; }}BYTE _MENU_GetCountForUpItem(MENU *pMenu, BYTE bCursorIndex){ BYTE bCount = 0; if (bCursorIndex == 0) return 0; while (bCursorIndex != 0) { bCursorIndex--; bCount++; if (pMenu->pMenuItem[bCursorIndex].bAttribute == MENU_ITEM_STATE_ENABLE) break; } if (bCursorIndex == 0) { if (pMenu->pMenuItem[bCursorIndex].bAttribute == MENU_ITEM_STATE_DISABLE) { return 0; } } return bCount;}BYTE _MENU_GetCountForDownItem(MENU *pMenu, BYTE bCursorIndex){ BYTE bCount = 0; if (bCursorIndex == (pMenu->bTotalItem-1)) return 0; while (bCursorIndex != (pMenu->bTotalItem-1)) { bCursorIndex++; bCount++; if (pMenu->pMenuItem[bCursorIndex].bAttribute == MENU_ITEM_STATE_ENABLE) break; } if (bCursorIndex == (pMenu->bTotalItem-1)) { if (pMenu->pMenuItem[bCursorIndex].bAttribute == MENU_ITEM_STATE_DISABLE) { return 0; } } return bCount;}void MENU_ClearMenuBackground(BYTE bMenuMode, HMENU hMenu){ PARM_RECT MENURect; if (bMenuMode == MENU_MAIN_MENU) { _MENU_GetMainMenuDisplayRect(hMenu, &MENURect); } else if (bMenuMode == MENU_SUB_MENU) { _MENU_GetSubMenuDisplayRect(hMenu, &MENURect); } MENURect.bColor = _bMENUBackgroundColor[hMenu]; MENURect.rect.wTop -= MENU_FRAME_THICKNESS; MENURect.rect.wBottom += MENU_FRAME_THICKNESS; MENURect.rect.wLeft -= MENU_FRAME_THICKNESS; MENURect.rect.wRight += MENU_FRAME_THICKNESS; GDI_FillRect(0, &MENURect); }BYTE _MENU_CheckIfAnyItemHasSubMenu(MENU *pMenu){ BYTE bMenuItemIndex; BYTE bSubMenuSymbol = FALSE; for (bMenuItemIndex = 0; bMenuItemIndex < pMenu->bTotalItem; bMenuItemIndex++) { if (pMenu->pMenuItem[bMenuItemIndex].pSubMenu != NULL) { bSubMenuSymbol = TRUE; } } return bSubMenuSymbol;}void _MENU_CopyString(void){ BYTE i; for (i = 0; i < __pOSDUTLOutputString[0]+1; i++) { __wMENUStringBuf[i] = __pOSDUTLOutputString[i]; }}void MENU_ResetToDefaultState(HMENU hMenu){ _pMENUSubMenu[hMenu] = (PMENU)(_pMENUCurrentMenu[hMenu]->pMenuItem[_pMENUCurrentMenu[hMenu]->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; } //Main menu has "Up" mark? _MENU_SetMainMenuInitialDisplay(hMenu); if (_pMENUSubMenu[hMenu] != NULL) { //Sub-menu has "Up" mark? _MENU_SetSubMenuInitialDisplay(hMenu); }}BYTE MENU_GetCurrentItemID(HMENU hMenu){ if (_Cursor[hMenu].bPos == MENU_MAIN_MENU) { return (_pMENUCurrentMenu[hMenu]->pMenuItem[_Cursor[hMenu].bMainMenuIndex].bID); } else { if (_pMENUSubMenu[hMenu]->bMenuType == MENU_TYPE_NUM) { return _Cursor[hMenu].bSubMenuIndex; } else { return (_pMENUSubMenu[hMenu]->pMenuItem[(_Cursor[hMenu].bSubMenuIndex)].bID); } }}BYTE MENU_AllDisableItems(HMENU hMenu){ BYTE bMenuIndex; for (bMenuIndex = 0; bMenuIndex < _pMENUCurrentMenu[hMenu]->bTotalItem; bMenuIndex++) { if (_pMENUCurrentMenu[hMenu]->pMenuItem[bMenuIndex].bAttribute == MENU_ITEM_STATE_ENABLE) return FALSE; } return TRUE;}BYTE _MENU_AllDisableSubItems(HMENU hMenu){ BYTE bMenuIndex; for (bMenuIndex = 0; bMenuIndex < _pMENUSubMenu[hMenu]->bTotalItem; bMenuIndex++) { if (_pMENUSubMenu[hMenu]->pMenuItem[bMenuIndex].bAttribute == MENU_ITEM_STATE_ENABLE) return FALSE; } return TRUE;}BYTE _MENU_CheckMainMenuCursorState(HMENU hMenu){ //Set the cursor's position if (_pMENUCurrentMenu[hMenu]->pMenuItem[_Cursor[hMenu].bMainMenuIndex].bAttribute == MENU_ITEM_STATE_ENABLE) { if ((PMENU)(_pMENUCurrentMenu[hMenu]->pMenuItem[(_Cursor[hMenu].bMainMenuIndex)].pSubMenu) == NULL) { return FALSE; } else { return TRUE; } } while (_pMENUCurrentMenu[hMenu]->pMenuItem[_Cursor[hMenu].bMainMenuIndex].bAttribute == MENU_ITEM_STATE_DISABLE) { if ((_Cursor[hMenu].bMainMenuIndex+1) < (_MainMenuDisplay[hMenu].bStartDrawItem+_MainMenuDisplay[hMenu].bMaxVisibleItem)) { _Cursor[hMenu].bMainMenuIndex++; } else { break; } if (_pMENUCurrentMenu[hMenu]->pMenuItem[_Cursor[hMenu].bMainMenuIndex].bAttribute == MENU_ITEM_STATE_ENABLE) { _pMENUSubMenu[hMenu] = (PMENU)(_pMENUCurrentMenu[hMenu]->pMenuItem[(_Cursor[hMenu].bMainMenuIndex)].pSubMenu); if (_pMENUSubMenu[hMenu] == NULL) { _Cursor[hMenu].bSubMenuIndex = CURSOR_POS_INVALID; } else { _Cursor[hMenu].bSubMenuIndex = _pMENUSubMenu[hMenu]->bDefaultCursorPos; _MENU_SetSubMenuInitialDisplay(hMenu); } return TRUE; } } _pMENUSubMenu[hMenu] = NULL; _Cursor[hMenu].bSubMenuIndex = CURSOR_POS_INVALID; return FALSE;}#ifdef SETUP_KEY_UP_DOWN_TOGGLE_OPTIONSvoid _MENU_GoToMainMenuItem(HMENU hMenu, BYTE bItem){ BYTE bCount; //Clear current sub-menu. MENU_ClearMenuBackground(MENU_MAIN_MENU, hMenu); _MENU_ClearUpDownArrowBackground(MENU_MAIN_MENU, hMenu, MENU_ARROW_TYPE_UP); _MENU_ClearUpDownArrowBackground(MENU_MAIN_MENU, hMenu, MENU_ARROW_TYPE_DOWN); MENU_ClearMenuBackground(MENU_SUB_MENU, hMenu); if (bItem == MENU_FIRST_ITEM) { _Cursor[hMenu].bMainMenuIndex = 0; if (_pMENUCurrentMenu[hMenu]->pMenuItem[_Cursor[hMenu].bMainMenuIndex].bAttribute == MENU_ITEM_STATE_DISABLE) { bCount = _MENU_GetCountForDownItem(_pMENUCurrentMenu[hMenu], _Cursor[hMenu].bMainMenuIndex); _Cursor[hMenu].bMainMenuIndex += bCount; } if (_pMENUCurrentMenu[hMenu]->bTotalItem <= _MainMenuDisplay[hMenu].bMaxVisibleItem) { _MainMenuDisplay[hMenu].bStartDrawItem = 0; _MainMenuDisplay[hMenu].bUpMark = FALSE; } else { if (_Cursor[hMenu].bMainMenuIndex >= _MainMenuDisplay[hMenu].bMaxVisibleItem) { _MainMenuDisplay[hMenu].bStartDrawItem = _Cursor[hMenu].bMainMenuIndex; } else { _MainMenuDisplay[hMenu].bStartDrawItem = 0; } } } else if (bItem == MENU_LAST_ITEM) { _Cursor[hMenu].bMainMenuIndex = _pMENUCurrentMenu[hMenu]->bTotalItem-1; if (_pMENUCurrentMenu[hMenu]->pMenuItem[_Cursor[hMenu].bMainMenuIndex].bAttribute == MENU_ITEM_STATE_DISABLE) { bCount = _MENU_GetCountForUpItem(_pMENUCurrentMenu[hMenu], _Cursor[hMenu].bMainMenuIndex); _Cursor[hMenu].bMainMenuIndex -= bCount; } if (_pMENUCurrentMenu[hMenu]->bTotalItem <= _MainMenuDisplay[hMenu].bMaxVisibleItem) { _MainMenuDisplay[hMenu].bStartDrawItem = 0; _MainMenuDisplay[hMenu].bUpMark = FALSE; } else { if (_Cursor[hMenu].bMainMenuIndex >= _MainMenuDisplay[hMenu].bMaxVisibleItem) { _MainMenuDisplay[hMenu].bStartDrawItem = _Cursor[hMenu].bMainMenuIndex - _MainMenuDisplay[hMenu].bMaxVisibleItem + 1; } else { _MainMenuDisplay[hMenu].bStartDrawItem = 0; } } } if (_MainMenuDisplay[hMenu].bStartDrawItem == 0) { //Clear "Up" mark _MainMenuDisplay[hMenu].bUpMark = FALSE; } else { _MainMenuDisplay[hMenu].bUpMark = TRUE; } if ((_MainMenuDisplay[hMenu].bStartDrawItem+_MainMenuDisplay[hMenu].bMaxVisibleItem) < _pMENUCurrentMenu[hMenu]->bTotalItem) { _MainMenuDisplay[hMenu].bDownMark = TRUE; } else { _MainMenuDisplay[hMenu].bDownMark = FALSE; } _MENU_ShowMainMenu(hMenu); 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); }}void _MENU_GoToSubMenuItem(HMENU hMenu, BYTE bItem){ BYTE bCount; //Clear current sub-menu. MENU_ClearMenuBackground(MENU_SUB_MENU, hMenu); _MENU_ClearUpDownArrowBackground(MENU_SUB_MENU, hMenu, MENU_ARROW_TYPE_UP); _MENU_ClearUpDownArrowBackground(MENU_SUB_MENU, hMenu, MENU_ARROW_TYPE_DOWN); if (bItem == MENU_FIRST_ITEM) { _Cursor[hMenu].bSubMenuIndex = 0; if (_pMENUSubMenu[hMenu]->pMenuItem[_Cursor[hMenu].bSubMenuIndex].bAttribute == MENU_ITEM_STATE_DISABLE) { bCount = _MENU_GetCountForDownItem(_pMENUSubMenu[hMenu], _Cursor[hMenu].bSubMenuIndex); _Cursor[hMenu].bMainMenuIndex += bCount; } if (_pMENUSubMenu[hMenu]->bTotalItem <= _SubMenuDisplay[hMenu].bMaxVisibleItem) { _SubMenuDisplay[hMenu].bStartDrawItem = 0; _SubMenuDisplay[hMenu].bUpMark = FALSE; } else { if (_Cursor[hMenu].bSubMenuIndex >= _SubMenuDisplay[hMenu].bMaxVisibleItem) { _SubMenuDisplay[hMenu].bStartDrawItem = _Cursor[hMenu].bSubMenuIndex; } else { _SubMenuDisplay[hMenu].bStartDrawItem = 0; } } } else if (bItem == MENU_LAST_ITEM) { _Cursor[hMenu].bSubMenuIndex = _pMENUSubMenu[hMenu]->bTotalItem-1; if (_pMENUSubMenu[hMenu]->pMenuItem[_Cursor[hMenu].bSubMenuIndex].bAttribute == MENU_ITEM_STATE_DISABLE) { bCount = _MENU_GetCountForUpItem(_pMENUSubMenu[hMenu], _Cursor[hMenu].bSubMenuIndex); _Cursor[hMenu].bSubMenuIndex -= bCount; } if (_pMENUSubMenu[hMenu]->bTotalItem <= _SubMenuDisplay[hMenu].bMaxVisibleItem) { _SubMenuDisplay[hMenu].bStartDrawItem = 0; _SubMenuDisplay[hMenu].bUpMark = FALSE; } else { if (_Cursor[hMenu].bSubMenuIndex >= _SubMenuDisplay[hMenu].bMaxVisibleItem) { _SubMenuDisplay[hMenu].bStartDrawItem = _Cursor[hMenu].bSubMenuIndex - _SubMenuDisplay[hMenu].bMaxVisibleItem + 1; } else { _SubMenuDisplay[hMenu].bStartDrawItem = 0; } } } if (_SubMenuDisplay[hMenu].bStartDrawItem == 0) { //Clear "Up" mark _SubMenuDisplay[hMenu].bUpMark = FALSE; } else { _SubMenuDisplay[hMenu].bUpMark = TRUE; } if ((_SubMenuDisplay[hMenu].bStartDrawItem+_SubMenuDisplay[hMenu].bMaxVisibleItem) < _pMENUSubMenu[hMenu]->bTotalItem) { _SubMenuDisplay[hMenu].bDownMark = TRUE; } else { _SubMenuDisplay[hMenu].bDownMark = FALSE; } _MENU_ShowSubMenu(hMenu); MENU_UpdateCursor(hMenu, CURSOR_STYLE_NORMAL);}#endif //SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -