EMWin实现点击文本就可以改变radio…

实例DIALOG_Radio.c
效果: EMWin实现点击文本就可以改变radio的状态


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



static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { FRAMEWIN_CreateIndirect, "Radio button sample", 0,              30,  70, 260, 100, FRAMEWIN_CF_MOVEABLE },
  { RADIO_CreateIndirect,        NULL,                    GUI_ID_RADIO0,    5,  10,    0,    0,    0,  3 },
  { TEXT_CreateIndirect,        "Suspend",            GUI_ID_TEXT0,    25,  10,  70,  20, TEXT_CF_LEFT },
  { TEXT_CreateIndirect,        "Shut down",        GUI_ID_TEXT1,    25,  30,  70,  20, TEXT_CF_LEFT },
  { TEXT_CreateIndirect,        "Restart after", GUI_ID_TEXT2,    25,  50,  70,  20, TEXT_CF_LEFT },
  { TEXT_CreateIndirect,        "seconds",            GUI_ID_TEXT3,  130,  50,  70,  20, TEXT_CF_LEFT },
  { EDIT_CreateIndirect,        "200",                    GUI_ID_EDIT0,    95,  47,  30,  19, 0, 3},
  { BUTTON_CreateIndirect,    "OK",                      GUI_ID_OK,        180,  10,  60,  20 },
  { BUTTON_CreateIndirect,    "Cancel",              GUI_ID_CANCEL, 180,  40,  60,  20 }
};



static void _cbBkWindow(WM_MESSAGE* pMsg) {
  switch (pMsg->MsgId) {
  case WM_PAINT:
      GUI_SetBkColor(GUI_RED);
      GUI_Clear();
      GUI_SetColor(GUI_WHITE);
      GUI_SetFont(&GUI_Font24_ASCII);
      GUI_DispStringHCenterAt("DIALOG_Radio - Sample", 160, 5);
      break;
  default:
      WM_DefaultProc(pMsg);
  }
}


static void _cbCallback(WM_MESSAGE * pMsg) {
  WM_HWIN hDlg;
  WM_HWIN hItem;
  int        Sel;
  int        NCode;
  int        Id;

  GUI_PID_STATE * pState;
  hDlg = pMsg->hWin;
  switch (pMsg->MsgId) {
      case WM_INIT_DIALOG:
          hItem = WM_GetDialogItem(hDlg, GUI_ID_EDIT0);
          EDIT_SetDecMode(hItem, 30,    0, 999, 0, 0);      // Select decimal mode
          WM_DisableWindow(hItem);
          break;
      case WM_KEY:
          switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) {
              case GUI_KEY_ESCAPE:
                  GUI_EndDialog(hDlg, 1);
                  break;
              case GUI_KEY_ENTER:
                  GUI_EndDialog(hDlg, 0);
                  break;
          }
          break;
      case WM_TOUCH_CHILD://实现点击文本就可以改变 radio button的状态
          Id = WM_GetId(pMsg->hWinSrc);          // Id of widget
          switch (Id) {
              case GUI_ID_TEXT0:
              case GUI_ID_TEXT1:
              case GUI_ID_TEXT2:
                  pState = (GUI_PID_STATE *)((WM_MESSAGE *)pMsg->Data.p)->Data.p;
                  if (pState) {
                      if (pState->Pressed) {
                          WM_HWIN hRadio = WM_GetDialogItem(hDlg, GUI_ID_RADIO0);
                          RADIO_SetValue(hRadio, Id - GUI_ID_TEXT0);      // Use the text beside the radio button to
                                                                                                                      // set the value of the radio button
                      }
                  }
                  break;
          }
          break;
      case WM_NOTIFY_PARENT:
          Id      = WM_GetId(pMsg->hWinSrc);          // Id of widget
          NCode = pMsg->Data.v;                                // Notification code
          switch (NCode) {
              case WM_NOTIFICATION_RELEASED:          // React only if released
                  switch (Id) {
                      case GUI_ID_OK:
                          GUI_EndDialog(hDlg, 0);
                          break;
                      case GUI_ID_CANCEL:
                          GUI_EndDialog(hDlg, 1);
                          break;
                  }
                  break;
              case WM_NOTIFICATION_VALUE_CHANGED:
                  hItem = WM_GetDialogItem(hDlg, GUI_ID_RADIO0);
                  Sel    = RADIO_GetValue(hItem);
                  hItem = WM_GetDialogItem(hDlg, GUI_ID_EDIT0);
                  WM_SetEnableState(hItem, Sel == 2);         
                  break;
          }
          break;
      default:
          WM_DefaultProc(pMsg);
  }
}



void MainTask(void) {
  GUI_Init();
  WM_SetCallback(WM_HBKWIN, &_cbBkWindow);
  WM_SetCreateFlags(WM_CF_MEMDEV);  // Use memory devices on all windows to avoid flicker
  while (1) {
      GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
      GUI_Delay(1000);
  }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值