硬汉嵌入式论坛

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

[emWin] 如何在回调函数中使用内存设备MEMDEV?

[复制链接]

7

主题

8

回帖

7

积分

新手上路

积分
7
发表于 2017-3-1 09:34:01 | 显示全部楼层 |阅读模式
如题,如何正确的在回调函数中使用内存设备,像以下方式是否可行?请各位大虾指教
static void _cbWin(WM_MESSAGE * pMsg) {
GUI_MEMDEV_Handle          hMem;
switch (pMsg->MsgId) {
case WM_PAINT:
Mem = GUI_MEMDEV_Create(xPos, yPos, 400, 320);
GUI_MEMDEV_Select(hMem);
GUI_SetBkColor(GUI_WHITE);
GUI_DrawBitmap(&_bmMap_400x320, xPos, yPos);

GUI_MEMDEV_Select(0);
GUI_MEMDEV_CopyToLCD(hMem);
GUI_MEMDEV_Delete(hMem);
break;
}
}
经测试好像有内存访问超出的异常,不知是本身开发板内部ram不够造成的还是以上代码实现不可取?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
发表于 2017-3-1 09:50:13 | 显示全部楼层
不需要每次都申请释放,效果不好,你只需在创建窗口前创建一次就可以了,删除窗口时再释放。

你当前的这种情况会无谓的让系统多余的创建和释放动态内存,你仅需在WM_PAINT消息里面调用GUI_MEMDEV_CopyToLCD(hMem);即可。
回复

使用道具 举报

7

主题

8

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2017-3-1 10:19:08 | 显示全部楼层
如果用你说的这种方式有两个问题需要请教:
1,如何在回调函数中获取内存设备句柄hMem?
2,释放内存需要在回调函数中操作还是在外面?如果是回调函数中应该在对应哪个消息中处理?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
发表于 2017-3-1 10:35:36 | 显示全部楼层

回 open429i_c 的帖子

open429i_c:如果用你说的这种方式有两个问题需要请教:
1,如何在回调函数中获取内存设备句柄hMem?
2,释放内存需要在回调函数中操作还是在外面?如果是回调函数中应该在对应哪个消息中处理? (2017-03-01 10:19) 
1. 句柄全局变量。或者静态局部变量,放在此回调函数里面即可

2. 如果是对话框可以放在WM_INIT_DIALOG里面创建,WM_DELETE里面删除。
回复

使用道具 举报

7

主题

8

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2017-3-1 10:42:30 | 显示全部楼层

回 eric2013 的帖子

eric2013:1. 句柄全局变量。或者静态局部变量,放在此回调函数里面即可

2. 如果是对话框可以放在WM_INIT_DIALOG里面创建,WM_DELETE里面删除。 (2017-03-01 10:35) 
刚接触stemwin不久,非常感谢您的回答[s:130]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 20:22 , Processed in 0.216792 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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