句柄: 柄,把柄 例如一个锅的手柄,你只要抓住了它,你就可以很好地操作那个锅,不过很明显你只能通过锅的手柄来做一些诸如炒菜之类的事,你不可能是因为抓住了锅的手柄才能去看电视.不能的物体都会至少有一个属于它的"手柄".
句柄是一种指向指针的指针。所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?
为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。
句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象
本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。
OK,了解好句柄之后 在继续看 HANDLE HINSTANCE HWND 这些
HINSTANCE是应用程序实例句柄。
HMODULE与HINSTANCE是完全相同的对象,
原因是在1 6 位Wi n d o w s 中,HMODULE和HINSTANCE用于标识不同的东西
HINSTANCE实际是系统将可执行文件的映象加载到进程的地址空间时使用的基本地址空间(引自WINDOWS核心编程4.1.1)
HINSTANCE 不能理解成进程地址 他是该EXE模块或DLL模块 加载到进程的 地址空间时 使用的首地址。
也就是该应用程序某部分模块 的句柄, 也就是指向 该模块 在进程地址空间中 的地址指针。
HWND是窗口对象句柄,
HANDLE是任意对象的句柄,
CWnd是MFC中的窗口类。 它是一个类 不能跟句柄混淆。
HDC 设备上下文句柄
是GDI(图形设备接口)内部保存数据的一种数据结构
设备描述表(DC:Device Context)的对象的句柄 以它为参数,调用各GDI函数来实现图形或文字的现实如TextOut
MFC
窗口相关的封装到CWnd中 窗口基类CWnd CWnd它派生于CCmdTarget类是最基本的GUI(图形用户接口)对象
作图相关的封装到CDC中 绘图基类CDC
进程地址空间 没研究明白!挺难理解的一个东西!先这样 带完善!
HANDLE HINSTANCE HWND CWnd CDC,布布扣,bubuko.com
HANDLE HINSTANCE HWND CWnd CDC
原文地址:http://www.cnblogs.com/huxu/p/3817005.html