EMWin对话框Diolog学习

1:实例DIALOG_Count.c
效果
EMWin对话框Diolog学习
EMWin对话框Diolog学习
EMWin对话框Diolog学习

#include "DIALOG.h"


static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { FRAMEWIN_CreateIndirect, "Counting...",        0,          30,  90, 260, 140, FRAMEWIN_CF_MOVEABLE },
  { TEXT_CreateIndirect,        "00",        GUI_ID_TEXT0,      10,  10, 120,  80 },
  { RADIO_CreateIndirect,      "",            GUI_ID_RADIO0,  150,  10, 100,  80, 0, 4 },
  { BUTTON_CreateIndirect,    "OK",        GUI_ID_OK,            10, 100,  60,  18 },
  { BUTTON_CreateIndirect,    "Cancel", GUI_ID_CANCEL,  180, 100,  60,  18 },
};

static const char * _apLabel[] = {
  "GUI_FontFD32",
  "GUI_FontFD48",
  "GUI_FontFD64",
  "GUI_FontFD80",
};

static const GUI_FONT * _apFont[] = {
  &GUI_FontD32,
  &GUI_FontD48,
  &GUI_FontD64,
  &GUI_FontD80
};

static const char * _asExplain[] = {
  "Please use the RADIO buttons to select",
  "the big digit font used for counting."
};



static void _SetFont(WM_HWIN hDlg) {
  WM_HWIN hItem;
  int Index;
  hItem = WM_GetDialogItem(hDlg, GUI_ID_RADIO0);
  Index = RADIO_GetValue(hItem);
  hItem = WM_GetDialogItem(hDlg, GUI_ID_TEXT0);
  TEXT_SetFont(hItem, _apFont[Index]);
}


static void _cbBkWindow(WM_MESSAGE * pMsg) {
  unsigned i;
  switch (pMsg->MsgId) {
  case WM_PAINT:
      GUI_SetBkColor(GUI_BLUE);
      GUI_Clear();
      GUI_SetColor(GUI_WHITE);
      GUI_SetFont(&GUI_Font24_ASCII);
      GUI_DispStringHCenterAt("Counting Sample", 160, 5);
      GUI_SetFont(&GUI_Font8x16);
      for (i = 0; i < GUI_COUNTOF(_asExplain); i++) {
          GUI_DispStringAt(_asExplain[i], 5, 40 + i * 16);
      }
  default:
      WM_DefaultProc(pMsg);
  }
}


static void _cbCallback(WM_MESSAGE * pMsg) {
  unsigned i;
  int NCode, Id;
  WM_HWIN hDlg, hItem;
  hDlg = pMsg->hWin;
  switch (pMsg->MsgId) {
      case WM_INIT_DIALOG:  //初始化对话框
          hItem = WM_GetDialogItem(hDlg, GUI_ID_RADIO0);
          for (i = 0; i < GUI_COUNTOF(_apLabel); i++) {
              RADIO_SetText(hItem, _apLabel[i], i);
          }
          _SetFont(hDlg);
          break;
      case WM_NOTIFY_PARENT:  //事件类型为通知父窗口
          Id      = WM_GetId(pMsg->hWinSrc);     
          NCode = pMsg->Data.v;                           
          switch (NCode) {
          case WM_NOTIFICATION_VALUE_CHANGED:
              _SetFont(hDlg);
              break;
          case WM_NOTIFICATION_RELEASED:         
              if (Id == GUI_ID_OK) {                     
                  GUI_EndDialog(hDlg, 0);
              }
              if (Id == GUI_ID_CANCEL) {             
                  GUI_EndDialog(hDlg, 1);
              }
              break;
          }
          break;
      default:
          WM_DefaultProc(pMsg);
  }
}



void MainTask(void) {
  int Value = 0;
  WM_HWIN hDlgFrame;
  GUI_Init();
  WM_SetCallback(WM_HBKWIN, _cbBkWindow); 
  WM_SetCreateFlags(WM_CF_MEMDEV); 
  hDlgFrame = 0;
  while(1) {
      WM_HWIN hDlg, hText;
      char acText[3] = {0};
      GUI_Delay(150);
      if (!WM_IsWindow(hDlgFrame)) { //判断是否存在窗口
            hDlgFrame = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);//创建对话框 返回句柄
      }
      Value = (Value + 1) % 100;
      acText[0] = '0' + Value / 10;
      acText[1] = '0' + Value % 10;
      hDlg = WM_GetClientWindow(hDlgFrame);//获取客户端窗口的句柄
      hText = WM_GetDialogItem(hDlg, GUI_ID_TEXT0);//返回对话框的窗口句柄
      TEXT_SetText(hText, acText);//设置文本小工具的文本内容
  }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值