MFC中对象、句柄、ID之间的区别

时间:2021-09-07 05:00:24

MFC中的所有对象也就是C++中的对象,为什么有个窗口对象还要窗口句柄呢?还有什么线程句柄,甚至还有控件ID和进程ID呢?下面一一道来:

MFC中的对象,比如应用程序对象,视图对象等,是对象就会占用内存空间,我们就可以用指针指向此对象进行访问,但windows还提供了句柄访问,初看好像有点多余,实则不然。如果我们一个进程想访问另一个进程,根据对象指针访问就不行了。我们现在的Windows是一个完全保护的系统,应用程序工作于CPU的保护模式下,引入了虚存技术。每个进程拥有独立的4GB的地址空间,所以在应用程序中的地址是自己眼中的地址,不具有通用性。

那么两个进程就不能简单地传个地址就行了,窗体句柄就是windows内核的一种数据结构,不同窗体(可以是不同进程的不同窗体)有不同的窗体句柄,windows通过句柄可以识别不同的窗体对象。

那么进程句柄也是全局唯一的么?非也!进程句柄也是在本进程内有效,由创建进程或者打开进程时得到的句柄。进程ID才是全局唯一的。

那么控件ID是全局唯一的么?也不是!控件ID代表一个资源,很多时候就是代表一个资源所在的路径及资源名。

 

http://blog.csdn.net/solomon1/article/details/2027158#comments