更改emWin的控件显示样式的方法,以按键为例
方法一:
改默认皮肤
BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
方法二:
设置BMP图片
static const GUI_COLOR Colors[] = { 0x000000, 0xFFFFFF };
static const GUI_LOGPALETTE Palette = { 2, 1, Colors };
static const unsigned char acPhone0[] = {
________, ________, ________, ________,
________, ________, ________, ________,
________, ________, ________, ________,
________, ________, ________, ________,
________, ________, ________, ________,
________, ________, ________, ________,
________, ________, ________, ________,
________, ________, ________, ________,
________, ________, ________, ________,
________, ________, ________, ________,
________, ________, ________, ________,
_____XXX, XXXXXXXX, XXXXXXXX, XXX_____,
___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,
__XXXXXX, XXXXXXXX, XXXXXXXX, XXXXXX__,
_XXXXXXX, X_______, _______X, XXXXXXX_,
_XXXXXXX, X__XX___, ___XX__X, XXXXXXX_,
_XXXXXXX, X__XX___, ___XX__X, XXXXXXX_,
_XXXXXXX, X__XX___, ___XX__X, XXXXXXX_,
________, ___XX___, ___XX___, ________,
_______X, XXXXXXXX, XXXXXXXX, X_______,
______XX, XXXXXXXX, XXXXXXXX, XX______,
_____XXX, XXXX__X_, _X__XXXX, XXX_____,
____XXXX, XXXX__X_, _X__XXXX, XXXX____,
___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,
___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,
___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
___XXXXX, XXXX__X_, _X__XXXX, XXXXX___,
___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___,
___XXXXX, XXXXXXXX, XXXXXXXX, XXXXX___
};
static const GUI_BITMAP bm_1bpp_0 = { 32, 31, 4, 1, acPhone0, &Palette};
BUTTON_SetBitmapEx(BUTTON_Create(142, 100, 36, 40, GUI_ID_OK, WM_CF_SHOW), 0, &bm_1bpp_0, 2, 4);
方法三:
设置自定义绘制函数
#include "DIALOG.h"
#define ID_WINDOW_0 (GUI_ID_USER + 0x00)
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_1 (GUI_ID_USER + 0x02)
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 320, 240, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 77, 89, 80, 20, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 195, 153, 80, 20, 0, 0x0, 0 },
};
static int _buttionDraw(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo)
{
WM_HWIN hWin;
hWin = pDrawItemInfo->hWin;
switch (pDrawItemInfo->Cmd) {
case WIDGET_ITEM_DRAW_BACKGROUND:
if (BUTTON_IsPressed(pDrawItemInfo->hWin)) {
GUI_SetBkColor(GUI_RED);
GUI_Clear();
} else {
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
}
break;
case WIDGET_ITEM_DRAW_TEXT:
GUI_SetColor(GUI_WHITE);
GUI_SetTextAlign(GUI_TA_HCENTER | GUI_TA_VCENTER);
GUI_DispStringAt("AA", pDrawItemInfo->x0 + pDrawItemInfo->x1 / 2, pDrawItemInfo->y0 + pDrawItemInfo->y1 / 2);
break;
default:
return BUTTON_DrawSkinFlex(pDrawItemInfo);
}
}
static void _cbDialog(WM_MESSAGE * pMsg) {
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
BUTTON_SetSkin(WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0), _buttionDraw);
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
WM_HWIN CreateWindow(void) {
WM_HWIN hWin;
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
return hWin;
}
其效果如下: