emWin更改控件的顯示樣式的方法

更改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;
}

其效果如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章