智商是硬伤 发表于 2015-8-8 17:20:41

Windows程序设计——句柄

        句柄到底是神马?
        句柄,是整个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!

智商是硬伤 发表于 2015-8-11 17:53:30

{:7_146:}

WilliamYu 发表于 2015-10-11 12:09:37

{:1_1:}

wxjcpp 发表于 2015-10-19 16:55:28

:titter:
页: [1]
查看完整版本: Windows程序设计——句柄