野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 49363|回复: 118

[emWin] 【emWin5.20使用教程】第四期:在对话框上面做一个计数功能

  [复制链接]
发表于 2013-6-4 19:56:08 | 显示全部楼层 |阅读模式
说明: (野火团队原创教程,未经许可禁止转载)
         VC6.0  emWin5.20下载地址
         http://pan.baidu.com/share/link?shareid=641741&uk=286563520
         uCGUIBulder 4.0
         http://pan.baidu.com/share/link?shareid=641752&uk=286563520
         
一. 实验说明
     一共使用了以下几个控件
        RADIO,   TEXT,   BUTTON,  Frame. 这几个控件都是依附在对话框上面的。
二.  例程讲解

/*
----------------------------------------------------------------------
File        : DIALOG_Count.c
Purpose     : Shows a dialog which is continously counting

---------------------------END-OF-HEADER------------------------------
*/

#include "DIALOG.h"

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/
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 code
*
**********************************************************************
*/
/*********************************************************************
*
*       _SetFont
*/
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]);
}

/*********************************************************************
*
*       _cbBkWindow
*/
static void _cbBkWindow(WM_MESSAGE * pMsg) {
  int 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, 5, 40 + i * 16);
    }
  default:
    WM_DefaultProc(pMsg);
  }
}

/*********************************************************************
*
*       _cbCallback
*/
static void _cbCallback(WM_MESSAGE * pMsg) {
  int 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);
      }
      _SetFont(hDlg);
      break;
    case WM_NOTIFY_PARENT:
      Id    = WM_GetId(pMsg->hWinSrc);               /* Id of widget */
      NCode = pMsg->Data.v;                                /* Notification code */
      switch (NCode) {
      case WM_NOTIFICATION_VALUE_CHANGED: /* Value has changed */
          /* 检测到单选框变换,更改字体 */
        _SetFont(hDlg);
        break;
      case WM_NOTIFICATION_RELEASED:      /* React only if released */
        if (Id == GUI_ID_OK) {                           /* OK Button */
          GUI_EndDialog(hDlg, 0);
        }
        if (Id == GUI_ID_CANCEL) {                  /* Cancel Button */
          GUI_EndDialog(hDlg, 1);
        }
        break;
      }
      break;
    default:
      WM_DefaultProc(pMsg);
  }
}

/*********************************************************************
*
*       Exported code
*
**********************************************************************
*/
/*********************************************************************
*
*       MainTask
*/
void MainTask(void) {
  int Value = 0;
  WM_HWIN hDlgFrame;
  GUI_Init();
  WM_SetCallback(WM_HBKWIN, _cbBkWindow);  
  WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */
  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);
  }
}
QQ截图20130604195218.png

三.  如何在野火开发板上面跑这个程序
1.   在火哥的开发板里面找到这个UCGUI DEMO的横屏或竖屏的程序,

         将上面的代码复制到下面这个文件里面,覆盖掉原来的文件,就可
        以正常的运行了。
1.png




回复

使用道具 举报

发表于 2013-6-4 20:57:28 | 显示全部楼层
学习一下。。
回复 支持 反对

使用道具 举报

发表于 2013-6-4 20:58:10 | 显示全部楼层
学习学习啦,好资料啊正需要
回复 支持 反对

使用道具 举报

发表于 2013-6-4 21:21:59 | 显示全部楼层
最近速度有点慢了啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-5 00:28:55 | 显示全部楼层
苹果鱼吉 发表于 2013-6-4 21:21
最近速度有点慢了啊

这周就好了。
回复 支持 反对

使用道具 举报

发表于 2013-6-5 20:26:31 | 显示全部楼层
让教程来的更猛烈些吧。
回复 支持 反对

使用道具 举报

发表于 2013-6-8 05:34:01 | 显示全部楼层
dingding~~~
回复 支持 反对

使用道具 举报

发表于 2013-6-9 16:24:19 | 显示全部楼层
继续学习!
回复 支持 反对

使用道具 举报

发表于 2013-6-10 12:02:23 | 显示全部楼层
还需要回复,为何?
回复 支持 反对

使用道具 举报

发表于 2013-6-10 12:05:00 | 显示全部楼层
本帖最后由 隔海阳台 于 2013-6-10 15:49 编辑

新手请教:你好,请问如何在uc/GUI里面显示汉字字符?是在uc/GUI里!请求指点!
我是在定义button时遇到的:{ BUTTON_CreateIndirect, "野火", ID_BUTTON_0, 50, 10, 90, 35 },
显示的结果是是乱码,我已经在GUI.h中定义了:extern const GUI_FONT GUI_FontHZ24;
此外我已在工程中Font文件夹下添加了HZK24.c文件。
求指明问题和解决办法!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-10 20:03:51 | 显示全部楼层
隔海阳台 发表于 2013-6-10 12:05
新手请教:你好,请问如何在uc/GUI里面显示汉字字符?是在uc/GUI里!请求指点!
我是在定义button时遇到的 ...

在对话框回调函数的这个控件里面初始化BOTTON的字体
case WM_INIT_DIALOG:
            InitDialog(pMsg);  //就是这个地方
       break;
回复 支持 反对

使用道具 举报

发表于 2013-6-10 20:23:47 | 显示全部楼层
本帖最后由 隔海阳台 于 2013-6-10 20:41 编辑

谢谢哈!我已通过其他方式修改成功。 在定义button前定义BUTTON_SetDefaultFont(&GUI_FontHZ_zdyfont_16);即可。不过还是谢谢你。


回复 支持 反对

使用道具 举报

发表于 2013-6-11 19:49:35 | 显示全部楼层
good                                    
回复 支持 反对

使用道具 举报

发表于 2013-6-13 19:49:01 | 显示全部楼层
期待及时更新啊!太棒了,感谢楼主
回复 支持 反对

使用道具 举报

发表于 2013-6-16 13:14:10 | 显示全部楼层
太棒了,感谢楼主
回复 支持 反对

使用道具 举报

发表于 2013-6-25 16:07:22 | 显示全部楼层
学习太棒了,非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-6-29 08:31:08 | 显示全部楼层
拿分走人呵呵,楼下继续!
回复 支持 反对

使用道具 举报

发表于 2013-7-8 11:37:01 | 显示全部楼层
先看看再说。
回复 支持 反对

使用道具 举报

发表于 2013-7-10 14:08:47 | 显示全部楼层
拿分走人呵呵,楼下继续!拿分走人呵呵,楼下继续!拿分走人呵呵,楼下继续!拿分走人呵呵,楼下继续!
回复 支持 反对

使用道具 举报

发表于 2013-7-11 01:10:28 | 显示全部楼层
拿分走人呵呵,楼下继续!
回复 支持 反对

使用道具 举报

发表于 2013-7-11 10:08:33 | 显示全部楼层
太棒了,非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-7-20 17:42:07 | 显示全部楼层
正在做这方面的实验
回复 支持 反对

使用道具 举报

发表于 2013-7-20 21:22:16 | 显示全部楼层
太棒了,非常感谢学习一下
回复 支持 反对

使用道具 举报

发表于 2013-7-25 14:44:44 | 显示全部楼层
太棒了,非常感谢继续加油
回复 支持 反对

使用道具 举报

发表于 2013-7-25 20:43:50 | 显示全部楼层
认真学习,搞个合订本更好
回复 支持 反对

使用道具 举报

发表于 2013-7-29 17:04:25 | 显示全部楼层
太棒了,非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-8-1 09:13:39 | 显示全部楼层
太棒了,非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-8-1 12:54:38 | 显示全部楼层
沙发~支持楼主
回复 支持 反对

使用道具 举报

发表于 2013-8-4 22:29:11 | 显示全部楼层
无线模块
回复 支持 反对

使用道具 举报

发表于 2013-8-10 14:01:53 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-8-16 11:52:46 | 显示全部楼层
很想做一个触摸屏4X4矩阵键盘
回复 支持 反对

使用道具 举报

发表于 2013-8-19 18:40:22 | 显示全部楼层
抢沙发~我来顶楼主的顶顶,我来学习学习
回复 支持 反对

使用道具 举报

发表于 2013-8-21 08:50:23 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-8-28 16:24:32 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-9-6 21:33:29 | 显示全部楼层
学习一下..............
回复 支持 反对

使用道具 举报

发表于 2013-9-6 21:33:49 | 显示全部楼层
学习一下..............
回复 支持 反对

使用道具 举报

发表于 2013-9-6 22:24:16 | 显示全部楼层
见识一下!
回复 支持 反对

使用道具 举报

发表于 2013-9-7 10:02:32 | 显示全部楼层
每期都会好好看的真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-9-7 15:38:46 | 显示全部楼层
编译的时候会显示2处地方错误:77:GUI_DispStringAt(_asExplain, 5, 40 + i * 16);和98:RADIO_SetText(hItem, _apLabel, i);将其修改为:77:GUI_DispStringAt(_asExplain[i], 5, 40 + i * 16);和98:RADIO_SetText(hItem, _apLabel[i], i);即可通过编译
回复 支持 反对

使用道具 举报

发表于 2013-9-11 11:14:24 | 显示全部楼层
参观一下学习一下走过路过,不能错过走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-9-17 08:57:18 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-9-27 13:46:25 | 显示全部楼层
1111111111111111
回复 支持 反对

使用道具 举报

发表于 2013-9-30 20:32:15 | 显示全部楼层
擦啊。。。。有事只
回复 支持 反对

使用道具 举报

发表于 2013-10-8 21:53:14 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-10-12 14:15:18 | 显示全部楼层

RE: 【emWin5.20使用教程】第四期:在对话框上面做一个计数功能

内容!!!!!!!说说
回复 支持 反对

使用道具 举报

发表于 2013-10-22 11:17:36 | 显示全部楼层
比妹子还漂亮,赞一个真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-11-4 19:29:23 | 显示全部楼层
学了三个,开始第四个,支持野火
回复 支持 反对

使用道具 举报

发表于 2013-11-4 20:57:03 | 显示全部楼层
楼主:为什么不能通过修改代码来修改控件呢?我修改代码都没有用
回复 支持 反对

使用道具 举报

发表于 2013-11-5 11:28:25 | 显示全部楼层
比妹子还漂亮,赞一个
回复 支持 反对

使用道具 举报

发表于 2013-11-7 22:14:33 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-22 11:46 , Processed in 0.044163 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表