|
参照教程,已做成按键效果如下
代码分享如下:
static int _DrawSkin_BUTTON_Menu(const WIDGET_ITEM_DRAW_INFO *pDrawItemInfo)
{
char acBuffer[20];
GUI_RECT Rect;
switch (pDrawItemInfo->Cmd)
{
case WIDGET_ITEM_DRAW_BACKGROUND:
GUI_SetColor(GUI_WHITE);
GUI_AA_DrawRoundedRect(pDrawItemInfo->x0, pDrawItemInfo->y0, pDrawItemInfo->x1, pDrawItemInfo->y1, 0);
if (BUTTON_IsPressed(pDrawItemInfo->hWin))
{
GUI_SetColor(0xD59B16);
GUI_AA_FillRoundedRect(pDrawItemInfo->x0+1, pDrawItemInfo->y0, pDrawItemInfo->x1-1, pDrawItemInfo->y1, 0);
}
else
{
GUI_SetColor(0xD7D7D7);
GUI_AA_FillRoundedRect(pDrawItemInfo->x0+1, pDrawItemInfo->y0, pDrawItemInfo->x1-1, pDrawItemInfo->y1, 0);
}
break;
case WIDGET_ITEM_DRAW_TEXT:
BUTTON_GetText(pDrawItemInfo->hWin, acBuffer, sizeof(acBuffer));
Rect.x0 = pDrawItemInfo->x0;
Rect.y0 = pDrawItemInfo->y0;
Rect.x1 = pDrawItemInfo->x1;
Rect.y1 = pDrawItemInfo->y1;
GUI_SetFont(GUI_FONT_16B_ASCII);
GUI_SetTextMode(GUI_TM_TRANS);
if (BUTTON_IsPressed(pDrawItemInfo->hWin))
{
GUI_SetColor(GUI_WHITE);
GUI_DispStringInRect(acBuffer, &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER);
}
else
{
GUI_SetColor(GUI_BLACK);
GUI_DispStringInRect(acBuffer, &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER);
}
break;
default:
return BUTTON_DrawSkinFlex(pDrawItemInfo);
}
return 0;
}
但是,上图也仅仅是按下的效果,一松开又变回灰底黑字,想达到的效果是:
按下button1保持按下状态(蓝底白字),按下其他button(比如button2),则此时button2保持按下状态(蓝底白字),button1自动弹起(灰底黑字),如下所示效果:
因为涉及到不同按键之间的相互相应,不知如何实现? 或者是否应该选择其他控件(比如MENU,但这个自己构建皮肤函数不知如何下手。。)?
请赐教,谢谢! |
|