bokee.net

电子/电气工程师博客

正文 更多文章

关于句柄

                                关于句柄

                                 王佰营

 句柄是Windows使用的一种无重复的整数,它主要用来标识应用程序中的一个对象,如:窗口、实例、菜单、内存、输出设备、控制或文件等。例如,在模块定义文件中,菜单资源中的菜单项被定义并赋给一个句柄值。在应用程序的菜单中条中,第一个菜单的第一个菜单项可能被赋予100这个句柄值,第二个可能被赋予101这个句柄值。在应用程序的源代码中,这些菜单项就要通过100101来区分。

 Windows应用程序只能访问句柄,而不能直接访问句柄所指示的实际数据。只有Windows系统掌握着这些系统数据的存储权,这样才能在多任务环境中保护这些数据。

 句柄就是一个不重复整数,是应用程序中的一个对象的编号。如同实际中,每个人的身份证编号一样,公安机关或人事部门可通过身份证号,知道你的所有信息:生日、住址及有关档案信息;这些信息不是每个人可随便看的;但是身份证号每个人都可已知道。这里公安机关或人事部门等等政府相关机构相当于Windows系统,身份证号相当于句柄,通过它可知道每个对应的人的详细信息。不会让你拿上档案资料到处跑,即使让你拿上也要加上封印。

 句柄虽然是一个能相互区别的号码,但与我们普通的ID号又有区别,普通的ID号是可以由程序员自己定义的,而句柄不行,它是对象生成时系统指定的,是为了区别系统中存在的各个对象,这个句柄不是由程序员赋给的。如同身份证号不能由自己选定,而是由公安机关根据有关规则给定一样。

  句柄是一个32位的正整数,Windows系统用它来识别窗体或其他对象,例如字体或位图。特别是窗口,在Windows系统中,窗口可以有许多种。窗口可以是屏幕上的一块矩形封闭区域,比如您熟悉的应用程序窗口。窗体上的控件(例如列表框或滚动条)也可以是窗口,但并不是所有类型的控件都是窗口。桌面上的图标和桌面本身也是窗口。因为所有这些类型的对象都是窗口,所以 Windows可以用类似的方式处理它。    

 Windows系统给每个窗口一个唯一的句柄,通过句柄操纵该窗口。许多API函数可返回句柄或者接受句柄作参数。创建窗口时,Windows系统给它指派一个句柄,窗口消失后句柄被释放。虽然句柄在窗口的整个生存期内保持不变,但不能保证某窗口在被损坏并重新创建后还使用原来的句柄。所以,如果在变量中存储了一个句柄,请记住窗口损坏后句柄就失效了。

常见句柄有一下几种:

HACCEL        Handle to an accelerator table. 
  HANDLE        Handle to an object.
  HBITMAP       Handle to a bitmap.
  HBRUSH        Handle to a brush.
  HCONV         Handle to a dynamic data exchange (DDE) conversation.
  HCONVLIST     Handle to a DDE conversation list.
  HCURSOR       Handle to a cursor.
  HDC           Handle to a device context (DC).
  HDDEDATA      Handle to DDE data.
  HDESK         Handle to a desktop.
  HDROP         Handle to an internal drop structure.
  HDWP          Handle to a deferred window position structure.
  HENHMETAFILE  Handle to an enhanced metafile.
  HFILE         Handle to a file opened by OpenFile, not CreateFile.
  HFONT         Handle to a font.
  HGDIOBJ       Handle to a GDI object.
  HGLOBAL       Handle to a global memory block.
  HHOOK         Handle to a hook.
  HICON         Handle to an icon.
  HIMAGELIST    Handle to an image list.
  HIMC          Handle to input context.
  HINSTANCE     Handle to an instance.
  HKEY          Handle to a registry key.
  HKL           Input locale identifier.
  HLOCAL        Handle to a local memory block.
  HMENU         Handle to a menu.
  HMETAFILE     Handle to a metafile.
  HMODULE       Handle to a module.
  HMONITOR      Handle to a display monitor.
  HPALETTE      Handle to a palette.
  HPEN          Handle to a pen.
  HRGN          Handle to a region.
  HRSRC         Handle to a resource.
  HSZ           Handle to a DDE string.
  HWINSTA       Handle to a window station.
  HWND          Handle to a window.


分享到:

上一篇:TMS320C24x指令说明及举例

下一篇:关于LTD指令

评论 (0条) 发表评论

抢沙发,第一个发表评论
验证码