OpenEdv-开源电子网

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

emwin 窗口重绘问题

[复制链接]

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2017-8-20
在线时间
13 小时
发表于 2017-10-14 12:09:01 | 显示全部楼层 |阅读模式
2金钱
我用原子哥的FREERTOS移植emwIN的例程 学习emwin,但是在学习窗口重绘的时候,使用WM_CreateWindow()后,有句柄返回,但是屏幕上并没有显示窗口,就只有鼠标和字符,并且调用GUI_Exec()后会出现花屏的样子。我直接拷贝的原子哥的emwin 窗口重绘的代码不明所以。之前的例程都好好的,到这里就不行了,直接用原子哥原来的UCOS +emwin 例程是可以窗口重绘的。求大神们解决一下。到底有可能哪里出问题了。

最佳答案

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

已经找到问题了 [mw_shl_code=c,true] GUI_Init(); WM_SetCreateFlags(WM_CF_MEMDEV); WM_MULTIBUF_Enable(1); [/mw_shl_code] GUI_Init();放在WM_SetCreateFlags(WM_CF_MEMDEV);前面就行了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2017-8-20
在线时间
13 小时
 楼主| 发表于 2017-10-14 12:09:02 | 显示全部楼层
已经找到问题了
[mw_shl_code=c,true]       
        GUI_Init();                                         
        WM_SetCreateFlags(WM_CF_MEMDEV);
        WM_MULTIBUF_Enable(1);                 
[/mw_shl_code]

GUI_Init();放在WM_SetCreateFlags(WM_CF_MEMDEV);前面就行了
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2017-8-20
在线时间
13 小时
 楼主| 发表于 2017-10-14 13:25:54 | 显示全部楼层
刚发现的问题 调用WM_MoveWindow()后,emwin并没有向窗口发送WM_PAINT消息,我观察了下下,emwin只有在创建窗口时发送了一个WM_CREATE消息,接着就一直发送WM_MOVE消息。并没有发送重绘的消息
按照道理来说应该是,WM_MOVE后会有个WM_PRE_PAINT,然后在向窗口发送WM_PAINT重绘窗口不是么。不知道为什么,UCOS+emwin的重绘窗口例程会正常发送,换成FREERTOS的就不行,难道是原子哥的FREERTOS
移植emwin例程没完全移植好么?一模一样的代码。
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2017-8-20
在线时间
13 小时
 楼主| 发表于 2017-10-14 13:31:07 | 显示全部楼层
本帖最后由 你不会懂我 于 2017-10-14 13:35 编辑

[mw_shl_code=c,true]static void _MoveWindow(const char* pText)
{
        WM_HWIN hWnd;
        int i;
        hWnd = WM_CreateWindow(10,50,150,100,WM_CF_SHOW,_cbWindow,0);
        HAL_Delay(500);
        for(i=0;i<40;i++)
        {
                WM_MoveWindow(hWnd,2,2);
                HAL_Delay(10);
        }
        
        if(pText)
        {
                GUI_DispStringAt(pText,5,50);
                HAL_Delay(2500);
        }
        WM_DeleteWindow(hWnd);
        WM_Invalidate(WM_HBKWIN);
        GUI_Exec();
}[/mw_shl_code]
[mw_shl_code=c,true]//窗口回调函数
static void _cbWindow(WM_MESSAGE *pMsg)
{
        GUI_RECT Rect;
        switch(pMsg->MsgId)
        {
                case WM_PAINT:
                        WM_GetInsideRect(&Rect);
                        GUI_SetBkColor(GUI_RED);
                        GUI_SetColor(GUI_YELLOW);
                        GUI_ClearRectEx(&Rect);         
                        GUI_DrawRectEx(&Rect);      
                        GUI_SetColor(GUI_BLACK);
                        GUI_SetFont(&GUI_Font16_ASCII);
                        GUI_DispStringHCenterAt("Foreground Window",75,40);
                        break;
                default:
                        WM_DefaultProc(pMsg);
        }
}[/mw_shl_code]
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2017-8-20
在线时间
13 小时
 楼主| 发表于 2017-10-14 13:42:23 | 显示全部楼层
http://pan.baidu.com/s/1nuPPTVz     这是代码,用的板子的阿波罗F767的板子
回复

使用道具 举报

28

主题

104

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-1-11
在线时间
64 小时
发表于 2018-5-21 13:32:46 | 显示全部楼层
楼主搞明白为什么会这样么?我也遇到了这个问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 09:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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