硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1939|回复: 2
收起左侧

[emWin] 显示实时实时变化的数

[复制链接]

1

主题

0

回帖

1

积分

新手上路

积分
1
发表于 2017-6-12 10:14:01 | 显示全部楼层 |阅读模式
请教一下,我现在用EMWIN能显示出时间,但是不能够实现实时刷新,请问是哪儿的问题?
还有一个问题就是怎么将函数的返回值显示出来?以下是我的程序,请问是什么地方不对啊?非常感谢!

static void _cbDialog(WM_MESSAGE * pMsg) {
  WM_HWIN hItem;
    int     NCode;
  int     Id;
   
  switch (pMsg->MsgId) {
        
        case WM_PAINT:
            
            GUI_SetFont(&GUI_FontHZ16);
            GUI_SetColor(GUI_BLACK);
            GUI_GetTime();
            sprintf((char*)ttbuf1,"%02d-%02d-%02d",calendar.w_year,calendar.w_month,calendar.w_date);
            GUI_DispStringAt((const char*)ttbuf1,65,13);
            sprintf((char *)ttbuf1,"%02d:%02d:%02d",calendar.hour,calendar.min,calendar.sec);
            GUI_DispStringAt((const char*)ttbuf1,155,13);        
            
            
            WM_CreateTimer(TextDialoghWin,0,100,0);
        break;
   
  case WM_INIT_DIALOG:

    hItem = pMsg->hWin;
    FRAMEWIN_SetText(hItem, "Sleep condition");
    FRAMEWIN_SetFont(hItem, GUI_FONT_24_ASCII);
    FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);

    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_6);
    TEXT_SetFont(hItem, &GUI_FontHZ16);
    TEXT_SetText(hItem, "时间:");
   
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_7);
    TEXT_SetFont(hItem, &GUI_FontHZ16);
      TEXT_SetText(hItem, "睡眠总时间:");
    TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);        
    break;
    case WM_NOTIFY_PARENT:
    Id    = WM_GetId(pMsg->hWin);
    NCode = pMsg->Data.v;
//      switch(Id)
//        {
//            case ID_TEXT_7:
//            {
                switch(NCode)
                {
                    case WM_PAINT:
        //                SLP_TIME=Getslptime();
        //                GUI_DispDecAt(SLP_TIME,120,47,3);
                     
                        sprintf((char *)SLP_TIME,"%03d",sleeptime);
                        GUI_DispStringAt((const char*)SLP_TIME,120,47);

                        break;
                 }
//                break;
//            }
//            break;
//        }
        break;
        
  default:
    WM_DefaultProc(pMsg);
    break;
  }
}


static void _cbBkWindow(WM_MESSAGE* pMsg)
{
    switch(pMsg->MsgId)
    {
        case WM_PAINT:
            GUI_SetBkColor(GUI_BLUE);
            GUI_Clear();
        
            break;
      case WM_TIMER:
//          WM_RestartTimer(pMsg->Data.v,1000);
            WM_InvalidateWindow(TextDialoghWin);
            WM_ShowWindow(TextDialoghWin);
          break;

        default:
            WM_DefaultProc(pMsg);
          break;
    }
}


void sleep()
{   
//    GUI_Init();
//    Getslptime();
   
    WM_SetCallback(WM_HBKWIN,_cbBkWindow);
  TextDialoghWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
    FRAMEWIN_AddCloseButton(TextDialoghWin,FRAMEWIN_BUTTON_RIGHT,0);
    FRAMEWIN_AddMaxButton(TextDialoghWin,FRAMEWIN_BUTTON_RIGHT,2);
    FRAMEWIN_AddMinButton(TextDialoghWin,FRAMEWIN_BUTTON_RIGHT,2);
        
    while(1)
    {
    sleeptime=Getslptime();
        GUI_Exec();
//      GUI_Delay(20);
        delay_ms(100);
        WM_InvalidateWindow(TextDialoghWin); //对话框窗口无效
   
    }

}
回复

使用道具 举报

42

主题

1021

回帖

1152

积分

至尊会员

积分
1152
发表于 2017-6-12 10:30:11 | 显示全部楼层
不少人都用GUI_DispStringAt((const char*)ttbuf1,65,13);来显示文本,建议建立text文本widget,使用TEXT_SetText函数即可,不用自己处理刷新。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-6-12 11:39:23 | 显示全部楼层
你写的这个程序里面好几处要修改,你这样,学习下新版emWin教程的这个定时器章节。
先学会定时器更新TEXT文本控件:http://www.armbbs.cn/forum.php?mod=viewthread&tid=19834

有什么问题的话,这个帖子里面回复我,我们继续交流。
QQ截图20170612113647.png
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-15 12:28 , Processed in 0.280694 second(s), 33 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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