硬汉嵌入式论坛

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

[emWin] emWin手册中对控件动态内存的描述,虽然简短,但毕竟有价值

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2016-10-8 01:02:21 | 显示全部楼层 |阅读模式
emWin手册中好些比较有研究价值的内容,手册里面都是一带而过,不过还是值得读一读。
==================================
2.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
 楼主| 发表于 2016-10-8 01:04:35 | 显示全部楼层
emWin5.12中文版对此的翻译就稍稍有点水了,内存碎片翻译成分裂效应。。
3.png
回复

使用道具 举报

32

主题

187

回帖

283

积分

高级会员

积分
283
发表于 2016-10-8 09:35:44 | 显示全部楼层
[s:151]
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2016-10-8 09:35:48 | 显示全部楼层
别听他们乱扯,根本就不是那么回事。
使用句柄的主要作用是为了隔离用户和实现细节,避免用户可以直接访问内部信息区域,而不是为了可以重新调整内存区域,至少ucgui不具有这种能力。
ucgui的内存分配很烂,它的所谓句柄的数值只不过是内存池内的偏移量,跟实际使用指针没有什么分别。
ucgui只适合窗口对象数量很少的情况,数量多起来后它的运行效率不是很好。
实际上ucgui的很多东西,例如消息驱动方式、窗口消息处理函数等都是借鉴Windows系统的Win32 GUI架构。
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
发表于 2016-10-8 09:40:21 | 显示全部楼层

回 novice 的帖子

novice:别听他们乱扯,根本就不是那么回事。
使用句柄的主要作用是为了隔离用户和实现细节,避免用户可以直接访问内部信息区域,而不是为了可以重新调整内存区域,至少ucgui不具有这种能力。
ucgui的内存分配很烂,它的所谓句柄的数值只不过是内存池内的偏移量,跟实际使用指针没有什么分 .. (2016-10-08 09:35) 
刚接触win的编程的时候,一直无法理解句柄的意思。
句柄这个东西,看数值就是一个序号而已,常见的如1,2,3,4,5之类。不是C中传统的变量指针。

而且,有时候,销毁了窗口,但是句柄的数值依然存在,非常矛盾。

你能帮忙解释一下吗?
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2016-10-8 09:50:30 | 显示全部楼层
这种东西很难解析的,Windows里面的句柄并不是都采用相同的方法处理,因此内部含义各不相同。
以窗口句柄为例,我也不知道HWND这个东西跟什么东西实际对应,可能是一个数组的单元索引也可能是内存指针。
又例如HFILE这种句柄,根据我做WinCE驱动开发的经验,我估计是驱动程序返回给系统的信息。
其它的例如GDI资源句柄(HPEN\\HBRUSH\\HBITMAP......)包含了类型信息,因此DeleteObject这个API可以分辨出你给它的句柄是那种类型的资源。

你说的那个窗口句柄HWND,销毁了以后一般不会马上被重新使用。
HWND hWnd  = CreateWindowEx(0, .....);
DestroyWindow(hWnd);
ASSERT(!IsWindow(hWnd)); // 这里不会触发报警,因为IsWindow(hWnd)肯定返回FALSE。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-18 06:59 , Processed in 0.056009 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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