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

📄 toolbar.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "winav.h"
#ifdef SUPPORT_STB
#include "dvbcustm.h"
#endif
#include "utl.h"
#include "comutl.h"
#include "gdi.h"
#include "osddsply.h"
#include "osdnd.h"
#include "input.h"
#include "toolbar.h"

TOOLBAR *_pToolBar[MAX_SUPPORT_TOOLBAR_HANDLE_NUM];
HTOOLBAR _hToolBarStack[MAX_SUPPORT_TOOLBAR_HANDLE_NUM] = {TOOLBAR_HANDLE_FREE, TOOLBAR_HANDLE_FREE, TOOLBAR_HANDLE_FREE, TOOLBAR_HANDLE_FREE, TOOLBAR_HANDLE_FREE};
TOOLBAR_CURSOR _ToolBarCursor[MAX_SUPPORT_TOOLBAR_HANDLE_NUM];
BYTE _bTOOLBARBackgroundColor[MAX_SUPPORT_TOOLBAR_HANDLE_NUM];

//***************************************************************************
//  Function    :   _TOOLBAR_InitializeGDI
//  Abstract    :   Initialize the palette for the toolbar.
//  Arguments   :   none.
//  Return      :   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void _TOOLBAR_InitializeGDI(void)
{
    GDI_ChangePALEntry(TOOLBAR_PALETTE_ENTRY_GENERAL_BACKGROUND, TOOLBAR_PALETTE_COLOR_GENERAL_BACKGROUND, FALSE);
    GDI_ChangePALEntry(TOOLBAR_PALETTE_ENTRY_NORMAL_FRAME_BRIGHT, TOOLBAR_PALETTE_COLOR_NORMAL_FRAME_BRIGHT, FALSE);
    GDI_ChangePALEntry(TOOLBAR_PALETTE_ENTRY_NORMAL_FRAME_DARK, TOOLBAR_PALETTE_COLOR_NORMAL_FRAME_DARK, FALSE);
    GDI_ChangePALEntry(TOOLBAR_PALETTE_ENTRY_SEPARATE_FRAME_CENTER, TOOLBAR_PALETTE_COLOR_SEPARATE_FRAME_CENTER, FALSE);
    GDI_ChangePALEntry(TOOLBAR_PALETTE_ENTRY_BIG_BACKGROUND, TOOLBAR_PALETTE_COLOR_BIG_BACKGROUND, FALSE);

#ifdef SUPPORT_TEXT_TOOLBAR
    GDI_ChangePALEntry(TOOLBAR_PALETTE_ENTRY_ICON_NORMAL_BACKGROUND, TOOLBAR_PALETTE_COLOR_ICON_NORMAL_BACKGROUND, FALSE);
    GDI_ChangePALEntry(TOOLBAR_PALETTE_ENTRY_ICON_HIGHLIGHT_BACKGROUND, TOOLBAR_PALETTE_COLOR_ICON_HIGHLIGHT_BACKGROUND, FALSE);
    GDI_ChangePALEntry(TOOLBAR_PALETTE_ENTRY_ICON_PRESSED_BACKGROUND, TOOLBAR_PALETTE_COLOR_ICON_PRESSED_BACKGROUND, FALSE);
#endif //SUPPORT_TEXT_TOOLBAR

    GDI_WaitPaletteComplete();
}

HTOOLBAR TOOLBAR_CreateToolBar(TOOLBAR *pToolBar)
{
    HTOOLBAR hToolBar;

    hToolBar = _TOOLBAR_GetToolBarHandle();

    if (hToolBar != TOOLBAR_HANDLE_INVALID)
    {
        _pToolBar[hToolBar] = pToolBar;
        _ToolBarCursor[hToolBar].bPos = 0;
        _ToolBarCursor[hToolBar].bType = ICON_CURSOR_TYPE_HIGHLIGHT;
    }

    return hToolBar;
}

void TOOLBAR_ShowToolBar(HTOOLBAR hToolBar, BYTE bToolBarBackgroundColor)
{
    BYTE bIconIndex;
    PARM_FRAME ToolBarFrame;
	PARM_RECT Rect;
#ifdef SUPPORT_TEXT_TOOLBAR
	PARM_DRAW_STRING IconStringAttr;
#else
    PARM_DRAW_BITMAP DrawBitmap;
#endif //SUPPORT_TEXT_TOOLBAR

#ifdef SUPPORT_TEXT_TOOLBAR
    _TOOLBAR_InitializeGDI();

    _bTOOLBARBackgroundColor[hToolBar] = bToolBarBackgroundColor;

    //Draw the big background for the icons
    Rect.bColor = TOOLBAR_PALETTE_ENTRY_BIG_BACKGROUND;
    Rect.rect.wLeft = _pToolBar[hToolBar]->wStartX-TOOLBAR_ICON_BACKGROUND_DISTANCE;
    Rect.rect.wTop = _pToolBar[hToolBar]->wStartY-TOOLBAR_ICON_BACKGROUND_DISTANCE;
    if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_VERTICAL)
    {
        Rect.rect.wRight = _pToolBar[hToolBar]->wStartX+_pToolBar[hToolBar]->bIconWidth+TOOLBAR_ICON_BACKGROUND_DISTANCE-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-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-1;
        Rect.rect.wBottom = _pToolBar[hToolBar]->wStartY+_pToolBar[hToolBar]->bIconHeight+TOOLBAR_ICON_BACKGROUND_DISTANCE-1;
    }

    GDI_FillRect(0, &Rect);

    ToolBarFrame.rect.wLeft = Rect.rect.wLeft - TOOLBAR_FRAME_THICKNESS;
    ToolBarFrame.rect.wTop = Rect.rect.wTop-TOOLBAR_FRAME_THICKNESS;
    ToolBarFrame.rect.wRight = Rect.rect.wRight + TOOLBAR_FRAME_THICKNESS;
    ToolBarFrame.rect.wBottom = Rect.rect.wBottom + TOOLBAR_FRAME_THICKNESS;

    ToolBarFrame.bColorBright = TOOLBAR_PALETTE_ENTRY_NORMAL_FRAME_BRIGHT;
    ToolBarFrame.bColorDark = TOOLBAR_PALETTE_ENTRY_NORMAL_FRAME_DARK;    
    ToolBarFrame.bColorCenter = PAL_ENTRY_COLOR_TRANSPARENT;
    ToolBarFrame.bStyle = FRAME_POP;
    ToolBarFrame.bThickness = TOOLBAR_FRAME_THICKNESS;
    
    GDI_DrawFrame_909(0, &ToolBarFrame);

	IconStringAttr.bBackground = 1;
    IconStringAttr.bColorKey = 1;
    IconStringAttr.bShadow1 = 1;
    IconStringAttr.bShadow2 = 1;

	Rect.bColor = TOOLBAR_PALETTE_ENTRY_ICON_NORMAL_BACKGROUND;

	for (bIconIndex = 0; bIconIndex < _pToolBar[hToolBar]->bTotalIcon; bIconIndex++)
    {
		IconStringAttr.bTextColor = _pToolBar[hToolBar]->bIconNormalTextColor;

        if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_VERTICAL)
        {
			Rect.rect.wLeft = _pToolBar[hToolBar]->wStartX;
			Rect.rect.wTop = _pToolBar[hToolBar]->wStartY+bIconIndex*_pToolBar[hToolBar]->bIconHeight+bIconIndex*TOOLBAR_ICON_ICON_DISTANCE;

            IconStringAttr.wX = _pToolBar[hToolBar]->wStartX+((_pToolBar[hToolBar]->bIconWidth-GDI_GetStringWidth(_pToolBar[hToolBar]->pIcon[bIconIndex].pwString))>>1);
            IconStringAttr.wY = _pToolBar[hToolBar]->wStartY+bIconIndex*_pToolBar[hToolBar]->bIconHeight+bIconIndex*TOOLBAR_ICON_ICON_DISTANCE+((_pToolBar[hToolBar]->bIconHeight-GDI_GetStringHeight(_pToolBar[hToolBar]->pIcon[bIconIndex].pwString))>>1);
        }
        else if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_HORIZONTAL)
        {
			Rect.rect.wLeft = _pToolBar[hToolBar]->wStartX+bIconIndex*_pToolBar[hToolBar]->bIconWidth+(bIconIndex)*TOOLBAR_ICON_ICON_DISTANCE;
			Rect.rect.wTop = _pToolBar[hToolBar]->wStartY;

            IconStringAttr.wX = _pToolBar[hToolBar]->wStartX+bIconIndex*_pToolBar[hToolBar]->bIconWidth+bIconIndex*TOOLBAR_ICON_ICON_DISTANCE+((_pToolBar[hToolBar]->bIconWidth-GDI_GetStringWidth(_pToolBar[hToolBar]->pIcon[bIconIndex].pwString))>>1);
            IconStringAttr.wY = _pToolBar[hToolBar]->wStartY+((_pToolBar[hToolBar]->bIconHeight-GDI_GetStringHeight(_pToolBar[hToolBar]->pIcon[bIconIndex].pwString))>>1);
        }

		Rect.rect.wRight = Rect.rect.wLeft+_pToolBar[hToolBar]->bIconWidth-1;
		Rect.rect.wBottom = Rect.rect.wTop+_pToolBar[hToolBar]->bIconHeight-1;
			
		GDI_FillRect(0, &Rect);		
		GDI_DrawString(0, &IconStringAttr, _pToolBar[hToolBar]->pIcon[bIconIndex].pwString);
	}

    TOOLBAR_UpdateCursor(hToolBar, _ToolBarCursor[hToolBar].bType);

    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);
    }
#else
    //Load palette for Navigaor's icons.
    GDI_PALETTE_INFO    PaletteInfo_ToolBar = {GDI_BITMAP_PALETTE_INDEX_START,  PAL_ADDR, _pToolBar[hToolBar]->pPalette};

    _TOOLBAR_InitializeGDI();

    _bTOOLBARBackgroundColor[hToolBar] = bToolBarBackgroundColor;

	GDI_LoadPalette(&PaletteInfo_ToolBar);
    GDI_LoadBMP(_pToolBar[hToolBar]->BMPArrayptr, _pToolBar[hToolBar]->bTotalIcon);

    //Draw the big background for the icons
    Rect.bColor = TOOLBAR_PALETTE_ENTRY_BIG_BACKGROUND;
    Rect.rect.wLeft = _pToolBar[hToolBar]->wStartX-TOOLBAR_ICON_BACKGROUND_DISTANCE;
    Rect.rect.wTop = _pToolBar[hToolBar]->wStartY-TOOLBAR_ICON_BACKGROUND_DISTANCE;
    if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_VERTICAL)
    {
        Rect.rect.wRight = _pToolBar[hToolBar]->wStartX+_pToolBar[hToolBar]->bIconWidth+TOOLBAR_ICON_BACKGROUND_DISTANCE-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-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-1;
        Rect.rect.wBottom = _pToolBar[hToolBar]->wStartY+_pToolBar[hToolBar]->bIconHeight+TOOLBAR_ICON_BACKGROUND_DISTANCE-1;
    }

    GDI_FillRect(0, &Rect);

    ToolBarFrame.rect.wLeft = Rect.rect.wLeft - TOOLBAR_FRAME_THICKNESS;
    ToolBarFrame.rect.wTop = Rect.rect.wTop-TOOLBAR_FRAME_THICKNESS;
    ToolBarFrame.rect.wRight = Rect.rect.wRight + TOOLBAR_FRAME_THICKNESS;
    ToolBarFrame.rect.wBottom = Rect.rect.wBottom + TOOLBAR_FRAME_THICKNESS;

    ToolBarFrame.bColorBright = TOOLBAR_PALETTE_ENTRY_NORMAL_FRAME_BRIGHT;
    ToolBarFrame.bColorDark = TOOLBAR_PALETTE_ENTRY_NORMAL_FRAME_DARK;    
    ToolBarFrame.bColorCenter = PAL_ENTRY_COLOR_TRANSPARENT;
    ToolBarFrame.bStyle = FRAME_POP;
    ToolBarFrame.bThickness = TOOLBAR_FRAME_THICKNESS;
    
    GDI_DrawFrame_909(0, &ToolBarFrame);

    for (bIconIndex = 0; bIconIndex < _pToolBar[hToolBar]->bTotalIcon; bIconIndex++)
    {
        //Draw icon
        DrawBitmap.bBitmapID = bIconIndex;
        
        if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_VERTICAL)
        {
            DrawBitmap.wDestX = _pToolBar[hToolBar]->wStartX;
            DrawBitmap.wDestY = _pToolBar[hToolBar]->wStartY+bIconIndex*_pToolBar[hToolBar]->bIconHeight+bIconIndex*TOOLBAR_ICON_ICON_DISTANCE;
        }
        else if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_HORIZONTAL)
        {
            DrawBitmap.wDestX = _pToolBar[hToolBar]->wStartX+bIconIndex*_pToolBar[hToolBar]->bIconWidth+bIconIndex*TOOLBAR_ICON_ICON_DISTANCE;
            DrawBitmap.wDestY = _pToolBar[hToolBar]->wStartY;
        }

        DrawBitmap.bDestRegion = 0;
        GDI_DrawBitmap(&DrawBitmap, _pToolBar[hToolBar]->BMPArrayptr);        
        GDI_ChangePALEntry(_pToolBar[hToolBar]->pIcon[bIconIndex].bBGPaletteIndex, TOOLBAR_PALETTE_COLOR_ICON_NORMAL_BACKGROUND, FALSE);
    }

    TOOLBAR_UpdateCursor(hToolBar, _ToolBarCursor[hToolBar].bType);

    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);
    }

#endif //SUPPORT_TEXT_TOOLBAR
}


HTOOLBAR _TOOLBAR_GetToolBarHandle(void)
{
    BYTE i;
    for (i = 0; i < MAX_SUPPORT_TOOLBAR_HANDLE_NUM; i++)
    {
        if (_hToolBarStack[i] == TOOLBAR_HANDLE_FREE)
        {
            _hToolBarStack[i] = i;
            return _hToolBarStack[i];
        }
    }

    return TOOLBAR_HANDLE_INVALID;
}

void TOOLBAR_UpdateCursor(HTOOLBAR hToolBar, BYTE bType)
{
#ifdef SUPPORT_TEXT_TOOLBAR
	PARM_DRAW_STRING IconStringAttr;
	PARM_RECT Rect;

	IconStringAttr.bBackground = 1;
    IconStringAttr.bColorKey = 1;
    IconStringAttr.bShadow1 = 1;
    IconStringAttr.bShadow2 = 1;

    //the background for the icon
    if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_VERTICAL)
    {
        Rect.rect.wLeft = _pToolBar[hToolBar]->wStartX;
        Rect.rect.wTop = _pToolBar[hToolBar]->wStartY+_ToolBarCursor[hToolBar].bPos*_pToolBar[hToolBar]->bIconHeight+_ToolBarCursor[hToolBar].bPos*TOOLBAR_ICON_ICON_DISTANCE;
    }
    else if (_pToolBar[hToolBar]->bStyle == TOOLBAR_STYLE_HORIZONTAL)
    {
        Rect.rect.wLeft = _pToolBar[hToolBar]->wStartX+_ToolBarCursor[hToolBar].bPos*_pToolBar[hToolBar]->bIconWidth+(_ToolBarCursor[hToolBar].bPos)*TOOLBAR_ICON_ICON_DISTANCE;
        Rect.rect.wTop = _pToolBar[hToolBar]->wStartY;
    }

	Rect.rect.wRight = Rect.rect.wLeft+_pToolBar[hToolBar]->bIconWidth-1;
	Rect.rect.wBottom = Rect.rect.wTop+_pToolBar[hToolBar]->bIconHeight-1;

    switch (bType)
    {
    case ICON_CURSOR_TYPE_NORMAL:
		Rect.bColor = TOOLBAR_PALETTE_ENTRY_ICON_NORMAL_BACKGROUND;
		IconStringAttr.bTextColor = _pToolBar[hToolBar]->bIconNormalTextColor;
        break;
    case ICON_CURSOR_TYPE_HIGHLIGHT:
		Rect.bColor = TOOLBAR_PALETTE_ENTRY_ICON_HIGHLIGHT_BACKGROUND;
        _ToolBarCursor[hToolBar].bType = ICON_CURSOR_TYPE_HIGHLIGHT;
		IconStringAttr.bTextColor = _pToolBar[hToolBar]->bIconHighlightTextColor;
        break;
    case ICON_CURSOR_TYPE_PRESSED:
		Rect.bColor = TOOLBAR_PALETTE_ENTRY_ICON_PRESSED_BACKGROUND;
        _ToolBarCursor[hToolBar].bType = ICON_CURSOR_TYPE_PRESSED;
		IconStringAttr.bTextColor = _pToolBar[hToolBar]->bIconPressedTextColor;
        break;

⌨️ 快捷键说明

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