OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4801|回复: 2

emwin定时器的问题,有图有真相。。

[复制链接]

6

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2016-4-6
在线时间
12 小时
发表于 2016-5-19 11:55:20 | 显示全部楼层 |阅读模式
5金钱
我想做的事是这样的:创建一个窗口,上面有一个进度条PROGBAR,用WM定时器来更新它的数值,1秒让它增加1。想要的效果是这样的:


提问.jpg

#include "DIALOG.h"

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
#define ID_WINDOW_0     (GUI_ID_USER + 0x00)
#define ID_PROGBAR_0     (GUI_ID_USER + 0x01)

int Flag = 0;
// USER START (Optionally insert additional defines)
// USER END

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/

// USER START (Optionally insert additional static data)
// USER END

/*********************************************************************
*
*       _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 320, 240, 0, 0x0, 0 },
  { PROGBAR_CreateIndirect, "Progbar", ID_PROGBAR_0, 76, 89, 155, 38, 0, 0x0, 0 },
  // USER START (Optionally insert additional widgets)
  // USER END
};

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/

// USER START (Optionally insert additional static code)
// USER END

/*********************************************************************
*
*       _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg)
{
  WM_HWIN hItem;
  // USER START (Optionally insert additional variables)
  // USER END

  switch (pMsg->MsgId)
  {
    case WM_INIT_DIALOG:

    // Initialization of 'Window'

    hItem = pMsg->hWin;
    WINDOW_SetBkColor(hItem, GUI_LIGHTBLUE);

    // Initialization of 'Progbar'

    hItem = WM_GetDialogItem(pMsg->hWin, ID_PROGBAR_0);
    PROGBAR_SetFont(hItem, GUI_FONT_6X8);

最佳答案

查看完整内容[请看2#楼]

找到问题了,定时器创建的问题,把WM_HWIN CreateWindow(void)函数注释掉;在void MainTask(void)中添加: WM_HWIN hWin; hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0); 将hTimer = WM_CreateTimer(WM_HBKWIN,0,1000,0);改为hTimer = WM_CreateTimer(hWin,0,1000,0); 就搞定了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2016-4-6
在线时间
12 小时
 楼主| 发表于 2016-5-19 11:55:21 | 显示全部楼层
找到问题了,定时器创建的问题,把WM_HWIN CreateWindow(void)函数注释掉;在void MainTask(void)中添加:

WM_HWIN hWin;

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

将hTimer = WM_CreateTimer(WM_HBKWIN,0,1000,0);改为hTimer = WM_CreateTimer(hWin,0,1000,0);

就搞定了
回复

使用道具 举报

6

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2016-4-6
在线时间
12 小时
 楼主| 发表于 2016-5-19 11:56:58 | 显示全部楼层
代码竟然木有显示全。。。

追加!!!

/*********************************************************************
*
*       _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg)
{
  WM_HWIN hItem;
  // USER START (Optionally insert additional variables)
  // USER END

  switch (pMsg->MsgId)
  {
    case WM_INIT_DIALOG:
   
    // Initialization of 'Window'
   
    hItem = pMsg->hWin;
    WINDOW_SetBkColor(hItem, GUI_LIGHTBLUE);
   
    // Initialization of 'Progbar'
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_PROGBAR_0);
    PROGBAR_SetFont(hItem, GUI_FONT_6X8);
        PROGBAR_SetTextColor(hItem,0,GUI_BLACK);
        PROGBAR_SetMinMax(hItem,0,100);

    break;

        case WM_TIMER:
        hItem = WM_GetDialogItem(pMsg->hWin, ID_PROGBAR_0);
        WM_RestartTimer(pMsg->Data.v,1000);
        PROGBAR_SetValue(hItem,Flag);
        Flag ++;
        if(Flag == 100)
        {
          Flag = 0;
        }
        GUI_Delay(200);
        break;

        default:
    WM_DefaultProc(pMsg);
    break;
  }
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       CreateWindow
*/
WM_HWIN CreateWindow(void);
WM_HWIN CreateWindow(void)
{
  WM_HWIN hWin;

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

void MainTask(void)
{
        WM_HTIMER hTimer;
        GUI_Init();
        hTimer = WM_CreateTimer(WM_HBKWIN,0,1000,0);

        CreateWindow();
        while(1)
        {
                GUI_Delay(200);
        }
}
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 15:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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