EMWin小工具(WIDGET)Spinbox

本文展示了一个使用Spinbox控件的GUI应用示例。该示例创建了三个Spinbox控件,分别用于演示步进值设置、编辑模式下整数输入及全范围数值编辑。通过设置不同的皮肤和字体样式,提高了用户界面的美观性和可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实例:WIDGET_Spinbox.c
效果:
EMWin小工具(WIDGET)Spinbox



#include "GUI.h"
#include "DIALOG.h"


static const GUI_WIDGET_CREATE_INFO _aDialogSpinbox[] = {
  { FRAMEWIN_CreateIndirect, "Spinbox",                    0,                                0,  0, 260, 160, 0, 0, 0 },
  { TEXT_CreateIndirect,        "Step value",              GUI_ID_TEXT0,        20, 15, 100,  21, 0, 0, 0 },
  { TEXT_CreateIndirect,        "Editmode \"Step\"", GUI_ID_TEXT1,        20, 42, 100,  21, 0, 0, 0 },
  { TEXT_CreateIndirect,        "Editmode \"Edit\"", GUI_ID_TEXT2,        20, 75, 100,  21, 0, 0, 0 },
  { SPINBOX_CreateIndirect,  NULL,                              GUI_ID_SPINBOX0, 130, 15,  60,  21, 0, 0, 0 },
  { SPINBOX_CreateIndirect,  NULL,                              GUI_ID_SPINBOX1, 130, 42,  60,  21, 0, 0, 0 },
  { SPINBOX_CreateIndirect,  NULL,                              GUI_ID_SPINBOX2, 130, 75,  60,  21, 0, 0, 0 },
};



static void _cbBk(WM_MESSAGE * pMsg) {
  int xSize;
  int ySize;

  switch (pMsg->MsgId) {
  case WM_PAINT:
      xSize = LCD_GetXSize();
      ySize = LCD_GetYSize();
      GUI_DrawGradientV(0, 0, xSize, ySize, GUI_BLUE, GUI_BLACK);
      GUI_SetColor(GUI_WHITE);
      GUI_SetFont(&GUI_Font24_ASCII);
      GUI_SetTextMode(GUI_TM_TRANS);
      GUI_DispStringHCenterAt("WIDGET_Spinbox - Sample", xSize / 2, 5);
      break;
  default:
      WM_DefaultProc(pMsg);
  }
}


static void _cbClient(WM_MESSAGE * pMsg) {
  EDIT_Handle hEdit;
  WM_HWIN        hItem;
  int                Value;
  int                NCode;
  int                Id;

  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:
      FRAMEWIN_SetFont(pMsg->hWin, GUI_FONT_16B_ASCII);
      FRAMEWIN_SetSkin(pMsg->hWin, FRAMEWIN_SKIN_FLEX);
      hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0);
      TEXT_SetTextAlign(hItem, GUI_TA_VCENTER | GUI_TA_RIGHT);
      hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT1);
      TEXT_SetTextAlign(hItem, GUI_TA_VCENTER | GUI_TA_RIGHT);
      hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT2);
      TEXT_SetTextAlign(hItem, GUI_TA_VCENTER | GUI_TA_RIGHT);
      hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_SPINBOX0);
      SPINBOX_SetSkin(hItem, SPINBOX_SKIN_FLEX);
      hEdit = SPINBOX_GetEditHandle(hItem);
      EDIT_SetDecMode(hEdit, 1, 1, 10, 0, 0);
      hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_SPINBOX1);
      SPINBOX_SetSkin(hItem, SPINBOX_SKIN_FLEX);
      hEdit = SPINBOX_GetEditHandle(hItem);
      EDIT_SetDecMode(hEdit, 1, 0, 99999, 0, 0);
      hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_SPINBOX2);
      SPINBOX_SetSkin(hItem, SPINBOX_SKIN_FLEX);
      SPINBOX_SetEditMode(hItem, SPINBOX_EM_EDIT);
      SPINBOX_SetRange(hItem, 0, 99999);
      break;
  case WM_NOTIFY_PARENT:
      NCode = pMsg->Data.v;
      switch (NCode) {
      case WM_NOTIFICATION_VALUE_CHANGED:
          Id = WM_GetId(pMsg->hWinSrc);
          if (Id == GUI_ID_SPINBOX0) {
              Value = SPINBOX_GetValue(pMsg->hWinSrc);
              hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_SPINBOX1);
              SPINBOX_SetStep(hItem, Value);
          }
          break;
      default:
          WM_DefaultProc(pMsg);
      }
      break;
  case WM_PAINT:
      GUI_SetBkColor(0xAE9E8D);
      GUI_Clear();
      break;
  default:
      WM_DefaultProc(pMsg);
  }
}



void MainTask(void) {
  GUI_Init();
  WM_SetCallback(WM_HBKWIN, _cbBk);
  TEXT_SetDefaultTextColor(GUI_WHITE);
  GUI_CreateDialogBox(_aDialogSpinbox, GUI_COUNTOF(_aDialogSpinbox), _cbClient,  WM_HBKWIN,  30,  60);
  while (1) {
      GUI_Delay(100);
  }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值