MFC中什么叫句柄 mfc 获取控件句柄

(句柄)HANDLE

explaination from microsoft:

when you went to cinema,you bring a umbrella,and you want to have the peopel in cinema to keep the umbrella for you,thn you give them the umbrella,they give you a ticket to prove that they keep theumbrella for you.
Ok,the ticket is handle.Handle is meaningless itself,but you can use that.In brief,MS said about handle:"use it,don't ask what it is!"

微软说有他就行了,不用问句柄是什么。

微软本来可以给我们提供窗口的指针让我们来控制窗口,但是给我们指针就会暴露里面的数据(或者函数)这样不利于保密吧,所以就弄了个句柄让我们用,句柄是一个32位的数(注意,这个数表明是地址),微软可以通过一个按位异或的函数成为一个指向实际地址的指针,所以我们只要学着会用,创建,维护和销毁句柄就行了。

别人是这么说的

什么是句柄?

功能上的理解:
什么是"句柄"(handle),handle的本意是把柄,把手的意思。是你与操作系统打交道的东东。
举个通俗的例子,比如你考上了大学,入学后,学校(操作系统)会给你一个学生证号。
注意,这个号码是学校指定的,你无法自选。
有了这个号码(学生证,假设一证多用)享受学校提供的服务:
MFC中什么叫句柄 mfc 获取控件句柄
如你就可以去图书馆借书,去食堂吃饭,去教室上课等等。

但你不能到食堂里买啤酒,因为学校不允许这种服务。
而在计算机中系统提供的服务就是API调用,你有了HANDLE,就可以理直气壮地向系统提出调用API的服务。
而指针的权力就大多了,有了指针你可以到处去喝酒,打架,学校(操作系统)管不着,
所以句柄和指针的区别在于句柄指针调用系统提供的服务。
而句柄虽然是一个能相互区别的号码,但与我们普通的ID号又有区别,
普通的ID号是可以由程序员自己定义的,而句柄不行,它是对象生成是系统指定的,
是为了区别系统中存在的各个对象,这个句柄不是由程序员符给的。

概念上的理解
1。句柄,是整个windows编程的基础,一个句柄是指使用的一个唯一的整数值,
是指一个四字节长的数值,用于标志应用程序中的不同对象和同类对象中的不同的实例,
诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。
应用程序能够通过句柄访问相应的对象的信息。
2。句柄不是一个指针,程序不能利用它句柄来直接阅读文件中的信息。
如果句柄不用在I/O文件中,它是毫无用处的。
3。句柄是windows用来标志应用程序中建立的或是使用的唯一整数,
windows使用了大量的句柄来来标志很多对象。

机制上的理解
前面的分析很经典,但我认为有一点必须指出的。如果不对,请各位指证。
句柄是指针,一点不假,但是这个指针又与C中的指针有不同之处。
因为Windows是一个多任务的系统,其内存是可以移动的,
这样的话如果某一时刻有一个指针指向一块内存,之后的某个时刻却被系统移走了,
如果你再用这个指针的话就会出错。
为了解决这一问题,windows在系统专区开一块内存用于存放句柄,这个句柄的值就是一个地址,
当这一块内存被移走后,windows就修改这个句柄的值,再访问这块内存时,句柄的值总是有效的。
正因为这样当你使用GlobalAlloc分配的内存时,如果你指定这块内存的属性是固定的,
那么它的返回值可以直接给一个指针,如果是可以移动的,
返回值就必须给一个句柄,你就必须先GlobalLock后才能使用。
这是我对句柄理解,不知道对不对?

我的理解
其实,句柄是一个指向指针的指针。即:
在windows程序设计中,句柄仅是一个应用程序用来识别某些事情的数字

如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。
我们知 道,所谓指针是一种内存地址。
应用程序启动后,组成这个程序的各对象是住留在内的 。
如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。
但是,如果您真的这样认为,那么您就大错特错了。
我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,
Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。
对象被移动意味着它的地址变化 了。如果地址总是如此变化,我们该到哪里去找该对象呢?
为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,
用来专门 登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。
Wi ndows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。
这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。
这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统 。

句柄地址(稳定)→记载着对象在内存中的地址→对象在内存中的地址(不稳定) →实际对象
但是,必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是
原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成
是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电
影院售给我们的门票总是不同的一个座位是一样的道理。

他说句柄是一个指向指针的指针,我又试着搜了一下一个程序的HANDLE宏定义#ifdef STRICT
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; };typedef struct name##__ *name
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif
typedef HANDLE *PHANDLE;

真是个指针

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/58770.html

更多阅读

MFC中进度条控件的使用方法 mfc进度条控件使用

MFC中进度条控件的使用方法——简介进度条控件是程序开发中基础控件之一,常用于显示程序的进度。在进行程序安装、文件传输时经常用到。其用法也比较简单固定。今天就和大家分享一下其简单的使用方法吧。^_^MFC中进度条控件的使用方

什么叫一丝不挂,太绝了! 方文山的词太绝了

什么叫一丝不挂,太绝了!中国一丝不挂,太绝了。一、中国40岁以上官员中,超过80%与原配常年没有性生活,他们又不准备离婚。老百姓亲切地把这种现象称为“一不做,二不休”。二、香港的媒体如果不报导真相就会丢饭碗,我们的媒体如果报导真相就

什么叫直销? 直销找人

根据第443号国务院令公布的《直销管理条例》中首次对“什么是直销?什么叫直销?”明确定义:直销是指直销企业招募直销员,由直销员在固定营业场所之外直接向最终消费者推销产品的经销方式。二、直销定义的演变直销这一中文单词,顾名思义是

什么叫比肩 比肩格什么意思

什么叫比肩?比肩就是在四柱中与日主天干相同的的天干,比肩对日主我而言,乃是帮我的一种行为,是一种可以帮助我,排斥我,为我之同类,象征着协助和竞争,是一种心性稳重,自尊和善的星,因此喜欢与同年人共同合作和做事,一般代表同性姐妹朋友。比肩

转载 看看什么叫断章取义 看看什么叫脏牧

原文地址:看看什么叫断章取义作者:制片人何凡1、父母在,不远游原文:子曰:“父母在,不远游,游必有方。”——《论语·里仁》意思是要是出游,必须要告知去处和理由。点评:不是不让你去啊有木有……2、吾生也有涯,而知也无涯出自《庄子·养

声明:《MFC中什么叫句柄 mfc 获取控件句柄》为网友麻木分享!如侵犯到您的合法权益请联系我们删除