硬汉嵌入式论坛

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

[emWin] emwin的Edit中数据自加1 实时更新显示,却显示的是每次加2

[复制链接]

2

主题

0

回帖

2

积分

新手上路

积分
2
发表于 2017-4-25 12:36:56 | 显示全部楼层 |阅读模式
我想在emwin的Edit中变量每自加 1 ,然后在Edit中 实时刷新,但是却显示的是每次自加 2 ,请求大神帮忙看看,感谢了!!  

  //背景窗口WM_HBKWIN回调函数
static void _cbBkWindow(WM_MESSAGE* pMsg)
{
       WM_HWIN hItem;
    static WM_HWIN hWin;
static    char a = 0;
char pbuf[4]={'\0'};
    switch(pMsg->MsgId)
    {
        case WM_PAINT:     
            a++;
            sprintf(pbuf,"%d",a);
              hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);   
            EDIT_SetText(hItem, pbuf);
        EDIT_SetFont(hItem, GUI_FONT_32B_1);
           
            break;
        default:
            WM_DefaultProc(pMsg);
    }
}

void CreateFramewin(void) {
     WM_SetCallback(WM_HBKWIN,_cbBkWindow);//设置背景窗口回调函数
    DialoghWin=GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate),_cbDialog,WM_HBKWIN,0,0);
     
     while(1)
    {
               
              WM_InvalidateWindow(WM_HBKWIN); //对话框窗口无效
        GUI_Delay(500);  
    }
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2017-4-25 13:59:34 | 显示全部楼层
先学习下emWin的定时器功能,给窗口创建了定时器后,在窗口回调函数的定时器消息里面更新EDIT就好了,EDIT有专门的API函数,直接可以在这个消息里面调用更新。
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2018-3-27 21:01:37 | 显示全部楼层
eric2013 发表于 2017-4-25 13:59
先学习下emWin的定时器功能,给窗口创建了定时器后,在窗口回调函数的定时器消息里面更新EDIT就好了,EDIT ...

也碰到这个问题了。 比如取得一个值,马上要在edit里面显示出来,有实时的要求。。。  原来发现显示好慢,原来emwin不是实时更新的,是消息驱动的。。。

硬汉有空来个最简单的例子?   
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2018-3-28 00:49:41 | 显示全部楼层
roguebear 发表于 2018-3-27 21:01
也碰到这个问题了。 比如取得一个值,马上要在edit里面显示出来,有实时的要求。。。  原来发现显示好慢 ...

需要实时的,直接给你的对话框或者窗口发自定义消息即可
我们的新版emWin教程里面有。
回复

使用道具 举报

9

主题

112

回帖

144

积分

初级会员

积分
144
发表于 2018-3-28 09:07:15 | 显示全部楼层
在WM_PAINT消息里工a++不行的吧,WM_PAINT的消息很可能被多次触发。sk 其它消息里面去增加,然后更新EDIT,然后调用WM_InvolidateWindow就可以更新显示了
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2018-4-3 22:23:26 | 显示全部楼层
yanchao7788 发表于 2018-3-28 09:07
在WM_PAINT消息里工a++不行的吧,WM_PAINT的消息很可能被多次触发。sk 其它消息里面去增加,然后更新EDIT, ...

来点具体的代码。。。??
回复

使用道具 举报

3

主题

105

回帖

114

积分

初级会员

积分
114
发表于 2018-4-4 08:59:58 | 显示全部楼层
WM_PAINT是用于绘制的事件,不要在里面调用EDIT_SetText()这种操作!
EDIT_SetText()本身就会令控件无效导致再次重绘(触发WM_PAINT事件)。segger文档有说明的,WM_PAINT只负责绘制!
emwin编程是有模式讲究的,不是想怎么写就怎么写。否则你以后会掉进很多坑里很惨的。
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2018-4-7 20:55:14 | 显示全部楼层
公仆 发表于 2018-4-4 08:59
WM_PAINT是用于绘制的事件,不要在里面调用EDIT_SetText()这种操作!
EDIT_SetText()本身就会令控件无 ...

哥们再讲讲 这个实时响应 咋弄? 用的最多的应该是EDIT_SetText()....
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2019-2-23 11:06:57 | 显示全部楼层
公仆 发表于 2018-4-4 08:59
WM_PAINT是用于绘制的事件,不要在里面调用EDIT_SetText()这种操作!
EDIT_SetText()本身就会令控件无 ...

有没有指南这种东西,肯文档真的挺累的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 12:02 , Processed in 0.186337 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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