找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17874|回复: 4
打印 上一主题 下一主题
收起左侧

EMWIN 按键调整文本控件显示

[复制链接]
跳转到指定楼层
楼主
ID:85681 发表于 2015-7-15 02:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要让文本控件实时显示变化的数,不能直接赋值,否则会死机,需要将变量转换成字符串再发送给文本控件,步骤很简单。
功能:两个按键实现文本控件的数字加减变化。
第一步:定义全局变量(不能定义局部变量,因为窗口重绘时候会将变量初始化)
             char buf[2];  
            
int i=0;
第二步:在static void _cbDialog(WM_MESSAGE * pMsg)函数里里面定义WM_HWIN hWin = pMsg->hWin;
第三步:在按键里面添加自己的代码(我采用按键按下执行变量加或者减一):
             (其实就是将变量存入数组中,将变量转换成字符串,然后赋给TEXT_SetText
              i++;if(i>59) i=0;
              sprintf(buf,  "%2d", i);
              TEXT_SetText(WM_GetDialogItem(hWin,ID_TEXT_0), buf);      


界面用 GUI_Builder建立,添加两个按钮和一个文本框TEXT,然后导入到代码工程里,
在main.c中申明一下函数void ButtonUse_Demo(void);
然后在任务里运行ButtonUse_Demo(); 即可。(我用UCOSII系统)
感谢ALIENTEK技术交流群的网友 神散形不散tnx@139.com(673882715) 的大力帮助,在此特地发表此文章,帮组初学EMWIN系统的孩子们能快速进入实战,省去自己摸索的时间。



//实例代码
#include "DIALOG.h"
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x04)
#define ID_BUTTON_0 (GUI_ID_USER + 0x05)
#define ID_BUTTON_1 (GUI_ID_USER + 0x06)
#define ID_TEXT_0 (GUI_ID_USER + 0x07)

char buf[2];
int i=0;


static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 4, 18, 216, 239, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 117, 127, 70, 90, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 11, 127, 70, 90, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text", ID_TEXT_0, 63, 11, 121, 89, 0, 0x64, 0 },
};



static void _cbDialog(WM_MESSAGE * pMsg)
{
    WM_HWIN hItem;
    int     NCode;
    int     Id;
    WM_HWIN hWin = pMsg->hWin;


    switch (pMsg->MsgId)
    {
           case WM_INIT_DIALOG:
                    // Initialization of 'Button'
                    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
                    BUTTON_SetText(hItem, "+");
                    BUTTON_SetFont(hItem, GUI_FONT_D48X64);
                    // Initialization of 'Button'
                    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
                    BUTTON_SetText(hItem, "-");
                    BUTTON_SetFont(hItem, GUI_FONT_D48X64);
                    // Initialization of 'Text'
                    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
                    TEXT_SetText(hItem, " 0");
                    TEXT_SetFont(hItem, GUI_FONT_D60X80);
                    TEXT_SetTextColor(hItem, 0x000000FF);
          break;
          case WM_NOTIFY_PARENT:
                    Id    = WM_GetId(pMsg->hWinSrc);
                    NCode = pMsg->Data.v;
                    switch(Id)
                    {
                            case ID_BUTTON_0: // Notifications sent by 'Button'
                                    switch(NCode)
                                    {
                                          case WM_NOTIFICATION_CLICKED:
                                                 i++;
                                                 if(i>59) i=0;

                                                 sprintf(buf,  "%2d", i);
                                                 TEXT_SetText(WM_GetDialogItem(hWin,ID_TEXT_0), buf);
                                          break;
                                          case WM_NOTIFICATION_RELEASED:
                                          break;
                                    }
                          break;
                          case ID_BUTTON_1: // Notifications sent by 'Button'
                                  switch(NCode)
                                  {
                                      case WM_NOTIFICATION_CLICKED:
                                            i--;
                                            if(i<0) i=59;

                                            sprintf(buf,  "%2d", i);
                                            TEXT_SetText(WM_GetDialogItem(hWin,ID_TEXT_0), buf);
                                      break;
                                      case WM_NOTIFICATION_RELEASED:
                                      break;
                                  }
                          break;
                    }
                    break;
                  default:
                WM_DefaultProc(pMsg);
                break;
          }
}


//创建一个对话框
WM_HWIN CreateFramewin(void)
{
WM_HWIN hWin;

hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
return hWin;
}

//BUTTO演示函数
void ButtonUse_Demo(void)
{
WM_HWIN hWin;
hWin=CreateFramewin();
while(1)
{
GUI_Delay(100);
}
}

//附图





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:106794 发表于 2016-6-1 15:16 | 只看该作者
楼主辛苦,感谢分享,赞一个!
回复

使用道具 举报

板凳
ID:246269 发表于 2017-11-5 16:40 | 只看该作者
楼主辛苦,感谢分享
回复

使用道具 举报

地板
ID:378465 发表于 2019-4-2 19:39 | 只看该作者
请问一下怎么实现长按就快速增加或减少,麻烦了
回复

使用道具 举报

5#
ID:108573 发表于 2020-2-9 10:53 | 只看该作者
17775275311 发表于 2019-4-2 19:39
请问一下怎么实现长按就快速增加或减少,麻烦了

虽然我没有测试,但是我说一下我的思路,你可以试一下看。就是点击按钮事件中创建一个emwin的定时器,在定时器事件中检测按钮是按下状态,那就++。加的速度跟你的定时器周期有关,看你想设置多少了。检测到按钮不是按下状态后就停止定时器。试一下,大家可以讨论一下
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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