📄 toolbar.c
字号:
default:
break;
}
if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_VERTICAL)
{
IconStringAttr.wX = _pToolBar[hToolBar]->wStartX+((_pToolBar[hToolBar]->bIconWidth-GDI_GetStringWidth(_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].pwString))>>1);
IconStringAttr.wY = _pToolBar[hToolBar]->wStartY+_ToolBarCursor[hToolBar].bPos*_pToolBar[hToolBar]->bIconHeight+_ToolBarCursor[hToolBar].bPos*TOOLBAR_ICON_ICON_DISTANCE+((_pToolBar[hToolBar]->bIconHeight-GDI_GetStringHeight(_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].pwString))>>1);
}
else if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_HORIZONTAL)
{
IconStringAttr.wX = _pToolBar[hToolBar]->wStartX+_ToolBarCursor[hToolBar].bPos*_pToolBar[hToolBar]->bIconWidth+(_ToolBarCursor[hToolBar].bPos)*TOOLBAR_ICON_ICON_DISTANCE+((_pToolBar[hToolBar]->bIconWidth-GDI_GetStringWidth(_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].pwString))>>1);
IconStringAttr.wY = _pToolBar[hToolBar]->wStartY+((_pToolBar[hToolBar]->bIconHeight-GDI_GetStringHeight(_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].pwString))>>1);
}
GDI_FillRect(0, &Rect);
GDI_DrawString(0, &IconStringAttr, _pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].pwString);
#else
switch (bType)
{
case ICON_CURSOR_TYPE_NORMAL:
GDI_ChangePALEntry(_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].bBGPaletteIndex, TOOLBAR_PALETTE_COLOR_ICON_NORMAL_BACKGROUND, FALSE);
break;
case ICON_CURSOR_TYPE_HIGHLIGHT:
_ToolBarCursor[hToolBar].bType = ICON_CURSOR_TYPE_HIGHLIGHT;
GDI_ChangePALEntry(_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].bBGPaletteIndex, TOOLBAR_PALETTE_COLOR_ICON_HIGHLIGHT_BACKGROUND, FALSE);
break;
case ICON_CURSOR_TYPE_PRESSED:
_ToolBarCursor[hToolBar].bType = ICON_CURSOR_TYPE_PRESSED;
GDI_ChangePALEntry(_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].bBGPaletteIndex, TOOLBAR_PALETTE_COLOR_ICON_PRESSED_BACKGROUND, FALSE);
break;
default:
break;
}
#endif //SUPPORT_TEXT_TOOLBAR
_TOOLBAR_DrawIconFrame(hToolBar, bType);
}
//***************************************************************************
// Function : TOOLBAR_ProcessKey
// Abstract :
// Arguments : none.
// Return :
// Side Effect : none.
// Notes :
//***************************************************************************
WORD TOOLBAR_ProcessKey(HTOOLBAR hToolBar, BYTE bKey)
{
if (_pToolBar[hToolBar] == NULL)
return ICON_ACTOIN_NONE;
//Return the ID of the menu item. The control flow can do the exact action according to the ID.
switch (bKey)
{
case KEY_LEFT:
if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_HORIZONTAL)
{
if (_ToolBarCursor[hToolBar].bPos != 0)
{
_TOOLBAR_IconAction(hToolBar, ICON_ACTOIN_PREVIOUS);
}
}
break;
case KEY_RIGHT:
if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_HORIZONTAL)
{
if (_ToolBarCursor[hToolBar].bPos != (_pToolBar[hToolBar]->bTotalIcon-1))
{
_TOOLBAR_IconAction(hToolBar, ICON_ACTOIN_NEXT);
}
}
else if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_VERTICAL)
{
if (_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].bIconType == ICON_TYPE_POPMENU)
{
TOOLBAR_UpdateCursor(hToolBar, ICON_CURSOR_TYPE_PRESSED);
return (ICON_ACTION_ACTIVATE_MENU << 8);
}
}
break;
case KEY_UP:
if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_VERTICAL)
{
if (_ToolBarCursor[hToolBar].bPos != 0)
{
_TOOLBAR_IconAction(hToolBar, ICON_ACTOIN_PREVIOUS);
}
#ifdef SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS
else
{
//Go to the first icon
_TOOLBAR_IconAction(hToolBar, ICON_ACTOIN_GO_TO_LAST);
}
#endif
}
else if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_HORIZONTAL)
{
//Move the cursor from menu to the icon
}
break;
case KEY_DOWN:
if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_VERTICAL)
{
if (_ToolBarCursor[hToolBar].bPos != (_pToolBar[hToolBar]->bTotalIcon-1))
{
_TOOLBAR_IconAction(hToolBar, ICON_ACTOIN_NEXT);
}
#ifdef SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS
else
{
//Go to the first icon
_TOOLBAR_IconAction(hToolBar, ICON_ACTOIN_GO_TO_FIRST);
}
#endif
}
else if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_HORIZONTAL)
{
if (_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].bIconType == ICON_TYPE_POPMENU)
{
TOOLBAR_UpdateCursor(hToolBar, ICON_CURSOR_TYPE_PRESSED);
return (ICON_ACTION_ACTIVATE_MENU << 8);
}
}
break;
case KEY_PLAY:
case KEY_ENTER:
if (_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].bIconType == ICON_TYPE_BUTTON)
{
return ((ICON_ACTION_PROCESS_ICON << 8 ) | _pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].bIconID);
}
break;
default:
break;
}
return ICON_ACTOIN_NONE;
}
void _TOOLBAR_IconAction(HTOOLBAR hToolBar, BYTE bAction)
{
#ifdef SUPPORT_TEXT_TOOLBAR
TOOLBAR_UpdateCursor(hToolBar, ICON_CURSOR_TYPE_NORMAL);
#else
//Clear the highlight
GDI_ChangePALEntry(_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].bBGPaletteIndex, TOOLBAR_PALETTE_COLOR_ICON_NORMAL_BACKGROUND, FALSE);
#endif //SUPPORT_TEXT_TOOLBAR
if (_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].Exit_Func_Ptr != NULL)
{
//Call the icon's "Exit" callback function.
_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].Exit_Func_Ptr();
}
_TOOLBAR_DrawIconFrame(hToolBar, ICON_CURSOR_TYPE_NORMAL);
if (bAction == ICON_ACTOIN_PREVIOUS)
{
_ToolBarCursor[hToolBar].bPos--;
}
else if (bAction == ICON_ACTOIN_NEXT)
{
_ToolBarCursor[hToolBar].bPos++;
}
#ifdef SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS
else if (bAction == ICON_ACTOIN_GO_TO_FIRST)
{
_ToolBarCursor[hToolBar].bPos = 0;
}
else if (bAction == ICON_ACTOIN_GO_TO_LAST)
{
_ToolBarCursor[hToolBar].bPos = _pToolBar[hToolBar]->bTotalIcon-1;
}
#endif //SETUP_KEY_UP_DOWN_TOGGLE_OPTIONS
//Show highlight
#ifdef SUPPORT_TEXT_TOOLBAR
TOOLBAR_UpdateCursor(hToolBar, ICON_CURSOR_TYPE_HIGHLIGHT);
#else
GDI_ChangePALEntry(_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].bBGPaletteIndex, TOOLBAR_PALETTE_COLOR_ICON_HIGHLIGHT_BACKGROUND, FALSE);
#endif //SUPPORT_TEXT_TOOLBAR
if (_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].Initial_Func_Ptr != NULL)
{
//Call the icon's "initial" callback function.
_pToolBar[hToolBar]->pIcon[(_ToolBarCursor[hToolBar].bPos)].Initial_Func_Ptr(_ToolBarCursor[hToolBar].bType);
}
_TOOLBAR_DrawIconFrame(hToolBar, ICON_CURSOR_TYPE_HIGHLIGHT);
}
void TOOLBAR_DeleteToolBar(HTOOLBAR hToolBar, BYTE bClearBackground)
{
BYTE i;
for (i = 0; i < MAX_SUPPORT_TOOLBAR_HANDLE_NUM; i++)
{
if (_hToolBarStack[i] == hToolBar)
{
_hToolBarStack[i] = TOOLBAR_HANDLE_FREE;
//clear the background
if (bClearBackground)
{
_TOOLBAR_ClearBackground(hToolBar);
}
return;
}
}
}
void _TOOLBAR_DrawIconFrame(HTOOLBAR hToolBar, BYTE bType)
{
PARM_FRAME IconFrame;
if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_VERTICAL)
{
IconFrame.rect.wTop = _pToolBar[hToolBar]->wStartY+_ToolBarCursor[hToolBar].bPos*_pToolBar[hToolBar]->bIconHeight+_ToolBarCursor[hToolBar].bPos*TOOLBAR_ICON_ICON_DISTANCE-TOOLBAR_ICON_FRAME_THICKNESS;
IconFrame.rect.wLeft = _pToolBar[hToolBar]->wStartX-TOOLBAR_ICON_FRAME_THICKNESS;
}
else if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_HORIZONTAL)
{
IconFrame.rect.wTop = _pToolBar[hToolBar]->wStartY-TOOLBAR_ICON_FRAME_THICKNESS;
IconFrame.rect.wLeft = _pToolBar[hToolBar]->wStartX+_ToolBarCursor[hToolBar].bPos*_pToolBar[hToolBar]->bIconWidth+_ToolBarCursor[hToolBar].bPos*TOOLBAR_ICON_ICON_DISTANCE-TOOLBAR_ICON_FRAME_THICKNESS;
}
IconFrame.rect.wRight = IconFrame.rect.wLeft+_pToolBar[hToolBar]->bIconWidth+TOOLBAR_ICON_FRAME_THICKNESS*2;
IconFrame.rect.wBottom = IconFrame.rect.wTop+_pToolBar[hToolBar]->bIconHeight+TOOLBAR_ICON_FRAME_THICKNESS*2;
if (bType == ICON_CURSOR_TYPE_HIGHLIGHT)
{
IconFrame.bColorBright = TOOLBAR_PALETTE_ENTRY_NORMAL_FRAME_BRIGHT;
IconFrame.bColorDark = TOOLBAR_PALETTE_ENTRY_NORMAL_FRAME_DARK;
IconFrame.bStyle = FRAME_POP;
}
else if (bType == ICON_CURSOR_TYPE_PRESSED)
{
IconFrame.bColorBright = TOOLBAR_PALETTE_ENTRY_NORMAL_FRAME_BRIGHT;
IconFrame.bColorDark = TOOLBAR_PALETTE_ENTRY_NORMAL_FRAME_DARK;
IconFrame.bStyle = FRAME_PUSH;
}
else
{
IconFrame.bColorBright = TOOLBAR_PALETTE_ENTRY_BIG_BACKGROUND;
IconFrame.bColorDark = TOOLBAR_PALETTE_ENTRY_BIG_BACKGROUND;
IconFrame.bStyle = FRAME_POP;
}
IconFrame.bColorCenter = TOOLBAR_PALETTE_ENTRY_SEPARATE_FRAME_CENTER;
IconFrame.bThickness = TOOLBAR_ICON_FRAME_THICKNESS;
GDI_DrawFrame_909(0, &IconFrame);
}
void _TOOLBAR_ClearBackground(HTOOLBAR hToolBar)
{
PARM_RECT Rect;
Rect.bColor = _bTOOLBARBackgroundColor[hToolBar];
Rect.rect.wLeft = _pToolBar[hToolBar]->wStartX-TOOLBAR_ICON_BACKGROUND_DISTANCE-TOOLBAR_FRAME_THICKNESS;
Rect.rect.wTop = _pToolBar[hToolBar]->wStartY-TOOLBAR_ICON_BACKGROUND_DISTANCE-TOOLBAR_FRAME_THICKNESS;
if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_VERTICAL)
{
Rect.rect.wRight = _pToolBar[hToolBar]->wStartX+_pToolBar[hToolBar]->bIconWidth+TOOLBAR_ICON_BACKGROUND_DISTANCE+TOOLBAR_FRAME_THICKNESS-1;
Rect.rect.wBottom = _pToolBar[hToolBar]->wStartY+_pToolBar[hToolBar]->bTotalIcon*_pToolBar[hToolBar]->bIconHeight+TOOLBAR_ICON_ICON_DISTANCE*(_pToolBar[hToolBar]->bTotalIcon-1)+TOOLBAR_ICON_BACKGROUND_DISTANCE+TOOLBAR_FRAME_THICKNESS-1;
}
else if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_HORIZONTAL)
{
Rect.rect.wRight = _pToolBar[hToolBar]->wStartX+_pToolBar[hToolBar]->bTotalIcon*_pToolBar[hToolBar]->bIconWidth+TOOLBAR_ICON_ICON_DISTANCE*(_pToolBar[hToolBar]->bTotalIcon-1)+TOOLBAR_ICON_BACKGROUND_DISTANCE+TOOLBAR_FRAME_THICKNESS-1;
Rect.rect.wBottom = _pToolBar[hToolBar]->wStartY+_pToolBar[hToolBar]->bIconHeight+TOOLBAR_ICON_BACKGROUND_DISTANCE+TOOLBAR_FRAME_THICKNESS-1;
}
GDI_FillRect(0, &Rect);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -