📄 menu_121.c
字号:
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);
if (bCount == 0)
{
bCount = _MENU_GetCountForUpItem(_pMENUSubMenu[hMenu], _Cursor[hMenu].bSubMenuIndex);
if (bCount > 0)
{
_Cursor[hMenu].bSubMenuIndex -= bCount;
}
}
else
{
_Cursor[hMenu].bSubMenuIndex += bCount;
}
_pMENUSubMenu[hMenu]->bDefaultCursorPos = _Cursor[hMenu].bSubMenuIndex;
_MENU_SetSubMenuInitialDisplay(hMenu);
}
//Fill rectangle _MENU_GetSubMenuDisplayRect(hMenu, &MENURect); MENURect.bColor = MENU_PALETTE_ENTRY_GENERAL_BACKGROUND; GDI_FillRect(0, &MENURect); //Fill frame _MENU_DrawFrame(MENU_SUB_MENU, hMenu); //Draw separate frame if (_SubMenuDisplay[hMenu].bUpMark == TRUE) { _MENU_DrawSeparateFrame(MENU_SUB_MENU, hMenu, MENU_UP_SEPARATE_FRAME); _MENU_UpdateUpDownArraow(MENU_SUB_MENU, hMenu, MENU_ARROW_TYPE_UP); } if (_SubMenuDisplay[hMenu].bDownMark == TRUE) { _MENU_DrawSeparateFrame(MENU_SUB_MENU, hMenu, MENU_DOWN_SEPARATE_FRAME); _MENU_UpdateUpDownArraow(MENU_SUB_MENU, hMenu, MENU_ARROW_TYPE_DOWN); } wMenuWidth = _MENU_GetMenuWidth(_pMENUSubMenu[hMenu]); MENUStringAttr.bTextColor = MENU_PALETTE_ENTRY_ITEM_TEXT; MENUStringAttr.bBackground = MENU_PALETTE_ENTRY_GENERAL_BACKGROUND; MENUStringAttr.bColorKey = 0; if (_pMENUSubMenu[hMenu]->bTotalItem <= _SubMenuDisplay[hMenu].bMaxVisibleItem) { bDisplayItemNum = _pMENUSubMenu[hMenu]->bTotalItem; } else { bDisplayItemNum = _SubMenuDisplay[hMenu].bMaxVisibleItem; } for (bMenuIndex = 0; bMenuIndex < bDisplayItemNum; bMenuIndex++) {
if (_pMENUSubMenu[hMenu]->pMenuItem[bMenuIndex+(_SubMenuDisplay[hMenu].bStartDrawItem)].bAttribute == MENU_ITEM_STATE_DISABLE)
{
MENUStringAttr.bTextColor = MENU_PALETTE_ENTRY_ITEM_GRAYED;
}
else
{
MENUStringAttr.bTextColor = MENU_PALETTE_ENTRY_ITEM_TEXT;
}
if (_pMENUSubMenu[hMenu]->bMenuType == MENU_TYPE_NUM) { OSDUTL_PrepareOutputString(); OSDUTL_OutputNumFromIndex(_pMENUSubMenu[hMenu]->wStartNum+_SubMenuDisplay[hMenu].bStartDrawItem+bMenuIndex); _MENU_CopyString(); MENUStringAttr.wX = _MENU_GetStringStartH(MENU_SUB_MENU, hMenu, __pOSDUTLOutputString); MENUStringAttr.wY = _MENU_GetSubMenuNormalStartV(hMenu) + MENU_STRING_DISTANCE_V+bMenuIndex*MENU_ITEM_HEIGHT+((MENU_ITEM_HEIGHT-GDI_GetStringHeight(__pOSDUTLOutputString)) >> 1); GDI_DrawString_909(0, &MENUStringAttr, __wMENUStringBuf); } else { MENUStringAttr.wX = _MENU_GetStringStartH(MENU_SUB_MENU, hMenu, _pMENUSubMenu[hMenu]->pMenuItem[bMenuIndex+(_SubMenuDisplay[hMenu].bStartDrawItem)].pwItemText); MENUStringAttr.wY = _MENU_GetSubMenuNormalStartV(hMenu) + MENU_STRING_DISTANCE_V + bMenuIndex*MENU_ITEM_HEIGHT+((MENU_ITEM_HEIGHT-GDI_GetStringHeight(_pMENUSubMenu[hMenu]->pMenuItem[bMenuIndex+(_SubMenuDisplay[hMenu].bStartDrawItem)].pwItemText)) >> 1);; GDI_DrawString_909(0, &MENUStringAttr, _pMENUSubMenu[hMenu]->pMenuItem[bMenuIndex+(_SubMenuDisplay[hMenu].bStartDrawItem)].pwItemText); } //Draw check symbol if (_pMENUSubMenu[hMenu]->bCheckMenuItemPos != MENU_ITEM_NO_CHECKED_ITEM) { if ((bMenuIndex+_SubMenuDisplay[hMenu].bStartDrawItem) == _pMENUSubMenu[hMenu]->bCheckMenuItemPos) { MENUStringAttr.wX = MENURect.rect.wLeft + MENU_STRING_DISTANCE_H; MENUStringAttr.wY = _MENU_GetSubMenuNormalStartV(hMenu) + MENU_STRING_DISTANCE_V + bMenuIndex*MENU_ITEM_HEIGHT+((MENU_ITEM_HEIGHT-GDI_GetStringHeight(aMENUCheckSymbol)) >> 1); GDI_DrawString_909(0, &MENUStringAttr, aMENUCheckSymbol); } } } }}WORD _MENU_GetSubMenuNormalStartH(HMENU hMenu){ if (_pMENUSubMenu[hMenu]->wStartX == MENU_START_X_OPTIMIZED) { return _pMENUCurrentMenu[hMenu]->wStartX+_MENU_GetMenuWidth(_pMENUCurrentMenu[hMenu])+MENU_SUBMENU_DISTANCE; } else { return _pMENUSubMenu[hMenu]->wStartX; } }WORD _MENU_GetSubMenuNormalStartV(HMENU hMenu){ if (_pMENUSubMenu[hMenu]->wStartY == MENU_START_Y_OPTIMIZED) { return _pMENUCurrentMenu[hMenu]->wStartY; } else { return _pMENUSubMenu[hMenu]->wStartY; }}void _MENU_GetMainMenuDisplayRect(HMENU hMenu, PARM_RECT *pMENURect){ BYTE bItem; pMENURect->rect.wLeft = _pMENUCurrentMenu[hMenu]->wStartX; pMENURect->rect.wTop = _pMENUCurrentMenu[hMenu]->wStartY; pMENURect->rect.wRight = _pMENUCurrentMenu[hMenu]->wStartX+_MENU_GetMenuWidth(_pMENUCurrentMenu[hMenu])-1; if ((_MainMenuDisplay[hMenu].bUpMark == TRUE) || (_MainMenuDisplay[hMenu].bDownMark == TRUE)) { bItem = _MainMenuDisplay[hMenu].bMaxVisibleItem; } else { bItem = _pMENUCurrentMenu[hMenu]->bTotalItem; } pMENURect->rect.wBottom = _pMENUCurrentMenu[hMenu]->wStartY+bItem*MENU_ITEM_HEIGHT+MENU_STRING_DISTANCE_V*2-1; if (_MainMenuDisplay[hMenu].bUpMark == TRUE) { pMENURect->rect.wTop -= MENU_SEPARATE_FRAME_THICKNESS; pMENURect->rect.wTop -= MENU_UP_DOWN_ITEM_HEIGHT; } if (_MainMenuDisplay[hMenu].bDownMark == TRUE) { pMENURect->rect.wBottom += MENU_SEPARATE_FRAME_THICKNESS; pMENURect->rect.wBottom += MENU_UP_DOWN_ITEM_HEIGHT; } }void _MENU_GetSubMenuDisplayRect(HMENU hMenu, PARM_RECT *pMENURect){ BYTE bItem; pMENURect->rect.wLeft = _MENU_GetSubMenuNormalStartH(hMenu); pMENURect->rect.wTop = _MENU_GetSubMenuNormalStartV(hMenu); pMENURect->rect.wRight = pMENURect->rect.wLeft + _MENU_GetMenuWidth(_pMENUSubMenu[hMenu]) - 1; if ((_SubMenuDisplay[hMenu].bUpMark == TRUE) || (_SubMenuDisplay[hMenu].bDownMark == TRUE)) { bItem = _SubMenuDisplay[hMenu].bMaxVisibleItem; } else { bItem = _pMENUSubMenu[hMenu]->bTotalItem; } pMENURect->rect.wBottom = _MENU_GetSubMenuNormalStartV(hMenu)+bItem*MENU_ITEM_HEIGHT+MENU_STRING_DISTANCE_V*2-1; if (_SubMenuDisplay[hMenu].bUpMark == TRUE) { pMENURect->rect.wTop -= MENU_SEPARATE_FRAME_THICKNESS; pMENURect->rect.wTop -= MENU_UP_DOWN_ITEM_HEIGHT;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -