|
发表于 2016-3-10 10:09:47
|
显示全部楼层
一列按钮,每个按钮都设置自定义皮肤绘制函数
BUTTON_SetSkin(hBtns[i], _BtnDrawItemFunc);
以下代码是摘出来的,仅供参考下绘制流程啊~~
static int _BtnDrawItemFunc(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo)
{
GUI_COLOR bordColor, bkColor, txtColor;
const GUI_BITMAP* pBmp;
char txtBuf[21];
int32_t offsetX = 0,offsetY = 0;
switch (pDrawItemInfo->Cmd)
{
case WIDGET_ITEM_DRAW_BACKGROUND:
switch(pDrawItemInfo->ItemIndex)
{
case BUTTON_SKINFLEX_PI_ENABLED:
bordColor = NIC_BTN_SKIN_ENABLE_COLOR_E;
bkColor = BUTTON_GetBkColor(pDrawItemInfo->hWin, BUTTON_CI_UNPRESSED);
txtColor = BUTTON_GetTextColor(pDrawItemInfo->hWin, BUTTON_CI_UNPRESSED);
pBmp = BUTTON_GetBitmap(pDrawItemInfo->hWin, BUTTON_BI_UNPRESSED);
break;
case BUTTON_SKINFLEX_PI_PRESSED:
bordColor = NIC_BTN_SKIN_PRESSED_COLOR_E;
bkColor = BUTTON_GetBkColor(pDrawItemInfo->hWin, BUTTON_CI_PRESSED);
txtColor = BUTTON_GetTextColor(pDrawItemInfo->hWin, BUTTON_CI_PRESSED);
pBmp = BUTTON_GetBitmap(pDrawItemInfo->hWin, BUTTON_BI_PRESSED);
offsetX = 2;
offsetY = 2;
break;
}
/* 背景 */
GUI_SetColor(bkColor);
GUI_FillRect(pDrawItemInfo->x0+1, pDrawItemInfo->y0+1, pDrawItemInfo->x1-1, pDrawItemInfo->y1-1);
/* 图标 */
GUI_DrawBitmap(pBmp, NIC_MENU_BTN_BMP_X+offsetX, NIC_MENU_BTN_BMP_Y+offsetY);
/* 文本 */
BUTTON_GetText(pDrawItemInfo->hWin,txtBuf,64);
GUI_SetFont(&GUI_FontHZ16);
GUI_SetColor(txtColor);
GUI_SetBkColor(bkColor);
GUI_DispStringInRect(txtBuf, (GUI_RECT*)(&NIC_MENU_TXT_RECT), GUI_TA_HCENTER|GUI_TA_VCENTER);
break;
case WIDGET_ITEM_DRAW_BITMAP:
break;
case WIDGET_ITEM_DRAW_TEXT:
break;
default:
// Use the default skinning routine for processing all other commands
return BUTTON_DrawSkinFlex(pDrawItemInfo);
}
return 0;
} |
|