| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 479 人关注过本帖
标题:[讨论]一个绝对值得讨论的问题
只看楼主 加入收藏
cyberkdll
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-4-25
收藏
 问题点数:0 回复次数:5 
[讨论]一个绝对值得讨论的问题
HWND 和HANDLE 之间的区别是什么??
2006-04-26 17:06
jedimaster
Rank: 1
等 级:新手上路
帖 子:117
专家分:0
注 册:2006-3-31
收藏
得分:0 
HWND ---- handle to a window
2006-04-27 10:35
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
HANDLE就是一个指针,windows里面关于HANDLE的定义是typedef void *HANDLE;
而HWND在windows中的定义是typedef /* [wire_marshal] */ void __RPC_FAR *HWND;
看样子是一个指针,但是其中存放的其实不是运行的程序的进程空间的指针,而是程序的窗口在window窗口管理相关进程中的指针,不能直接访问
两者本质没啥区别,其实你不用管太多,其实都是windows中一个对象的句柄,但是HWND指向的地址不存在程序的进程中,而HANDLE指向的通常是本进程中一个对象的地址,能直接访问
以上是我个人理解,无聊猜的,不要相信哦,欢迎大家指正

[此贴子已经被作者于2006-4-27 15:33:18编辑过]


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-04-27 11:19
cyberkdll
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-4-25
收藏
得分:0 
HWND Findwindow(,)
那么这个语句是正确的吗?
CWnd* pWnd=this->FindWindow(,);

谢谢前面的清楚的解释!

----------------------------------------------- Cyberkdll
2006-04-27 14:35
yongyong
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-4-26
收藏
得分:0 
Handle 是一个一般意义的句柄,本质上是一个32位整数,是window内部的对象标示,并不是指针,windows的头文件中它被声明为void *而不是int,不知用意何在,但是实际上32位的系统中,定义成void*和int是没有区别的。
hWnd是窗口的句柄,它也是句柄,只不过用于窗口的标示而以,这样定义只不过为了程序的可读性,你完全可以把hWnd声明成Handle,在使用的时候用强制转换通过编译的类型检查,这都是没有问题的,因为二者的内存结构是完全一样的,32位整数而以!
2006-04-27 14:55
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
yongyong,lz是说我们探讨嘛,HWND和HANDLE的概念当然好查,正规的解释就不用探讨了,但是具体是什么就需要探讨啦,HWND应该不是平常意义的32位整数,你试试不停地创建窗口,然后查看窗口句柄(HWND),句柄的值还是相差蛮大的,但是却没有任何的规律和联系,如果是随即生成的话又不好检查是否重复,所以可以大胆假设HWND实际上就是根据指针生成的,这样可以保证不重复而且没有顺序,无聊,瞎猜下,呵呵,所以我上面的回帖的最后写了是个人想法嘛

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-04-27 15:31
快速回复:[讨论]一个绝对值得讨论的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027534 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved