马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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! |