windows 句柄理解

转自:http://blog.csdn.net/fysy0000/article/details/6615597
句柄是一个让你操纵某个对象的标识符。在windows中句柄有很多类型,有的是指针,有的是指向指针的指针,有的是一个数组索引。
但在编程中不需要在乎句柄是怎么样的,因为winapi调用掩盖了句柄操作的细节。

为什么我们需要句柄?

    更准确地说,是windows需要句柄。windows需要向程序员提供必要地编程接口,在这些接口中,允许程序员访问、创建和销毁对象。但是,出于封装地考虑,windows并不想向程序员返回指针。指针包含了太多的信息。首先指针给出了对象存储的确切位置;其次,要操作一个指针,程序员必须知道指针所指对象的内部结构特征,也即,windows必须向程序员暴露相应的数据结构,而这些数据结构也许是操作系统想向程序员隐藏的。

    如果说COM技术向用户隐藏了数据,只暴露了接口并只允许按接口定义的方法操作数据的话,句柄这种方式则允许你按自己的方式直接操作数据,但windows又不向你直接暴露数据。直接操作数据是程序员需要的,不暴露数据是windows所需要的,句柄封装方式实现了各取所需。

句柄和指针

    句柄与指针确实是完全不同的两个概念。句柄仅仅是一个32位整数,WIN32中用于标记某个系统或进程的对象,可以理解为对象索引(由于MS未完全公开相关技术,在一定程度上只能如此理解),这个索引更像是一种映射关系(从句柄到对象指针的映射)。

附注:获得窗口句柄三种方法

1.HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)

   HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTR lpWindowName)

2.HWND WindowFromPoint(POINT& Point)//获得当前鼠标光标位置的窗口HWND

3.BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)

BOOL CALLBACK EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc,LPARAM lParam)

BOOL CALLBACK EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)

附:句柄种类

HACCELHandle to an accelerator table.
HANDLEHandle to an object.
HBITMAPHandle to a bitmap.
HBRUSHHandle to a brush.
HCONVHandle to a dynamic data exchange (DDE) conversation.
HCONVLISTHandle to a DDE conversation list.
HCURSORHandle to a cursor.
HDCHandle to a device context (DC).
HDDEDATAHandle to DDE data.
HDESKHandle to a desktop.
HDROPHandle to an internal drop structure.
HDWPHandle to a deferred window position structure.
HENHMETAFILEHandle to an enhanced metafile.
HFILEHandle to a file opened by OpenFile, notCreateFile.
HFONTHandle to a font.
HGDIOBJHandle to a GDI object.
HGLOBALHandle to a global memory block.
HHOOKHandle to a hook.
HICONHandle to an icon.
HIMAGELISTHandle to an image list.
HIMCHandle to input context.
HINSTANCEHandle to an instance.
HKEYHandle to a registry key.
HKLInput locale identifier.
HLOCALHandle to a local memory block.
HMENUHandle to a menu.
HMETAFILEHandle to a metafile.
HMODULEHandle to a module.
HMONITORHandle to a display monitor.
HPALETTEHandle to a palette.
HPENHandle to a pen.
HRGNHandle to a region.
HRSRCHandle to a resource.
HSZHandle to a DDE string.
HWINSTAHandle to a window station.
HWNDHandle to a window

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值