鱼C论坛

 找回密码
 立即注册
查看: 3239|回复: 3

[技术交流] Windows程序设计——句柄

[复制链接]
发表于 2015-8-8 17:20:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
        句柄到底是神马?
        句柄,是整个Windows编程的基础。
        Windows使用了大量的句柄来标识很多对象。一个句柄就是一个int类型数值,它有4字节长(64位程序中为8字节),来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。
       
        这些文字概念读完之后好像没有什么感觉,那我们举个栗子:
HWND hwnd;//这里定义一个窗口句柄hwnd
        HWND是个啥?我们点它转到定义(Go to defination)
//windef.h
DECLARE_HANDLE            (HWND);
        这TM又是啥?别急,继续点它转到定义
//WinNT.h
#define DECLARE_HANDLE(name) struct name##__{int unused;};#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
        看仔细了,等下要变身了!!!
        ##是连接符号,就是把前后连起来;
        剩下的就是定义一个结构体了,这里name是HWND,相当于
        struct HWND__ { int unused; }; typedef struct HWND__ *HWND

        那么HWND hwnd的意思就是:
        定义指向
HWND__
{
      int unused;
};
结构体的指针变量hwnd。
        这个结构体只有一个数据成员:int unused; 这个就是所谓的标识符。也就是句柄。hwnd并不是直接指向unused,而是先指向包含unused的结构体,然后在找到unused,然后根据unused找到它标识的窗口。(这里以窗口句柄为例,其他的图标光标句柄都一样)

        看到这里,心中是不是有一万个草泥马奔腾而过?微软就是这样,绕来绕去,CAO!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-8-11 17:53:30 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-11 12:09:37 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-19 16:55:28 | 显示全部楼层
:titter:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 01:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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