MFC学习点滴三:句柄,指针,对象,资源的ID

时间:2021-08-12 05:05:08

摸索了很长时间,先在有些感觉。

1     句柄和指针。 指针只是一个地址(逻辑上的,给人的感觉就是只顾上头,而顾不上尾巴,而句柄好像能指

向一个块),而句柄手中握有资源,有人也把句柄作为MFC中的一种智能指针,这个我很赞同。句柄可以访问进

        程,资源,通过调用API或MFC的函数来改动,比指针更安全。句柄是对指针更高层次的抽象。

2     对象和句柄。对象是类的一个实例化。这个两个概念放在一起,最初是我在看到《VC++深入详解》里

        对CMenu对象使用Detach()时。

        有这样的一段程序:

       

MFC学习点滴三:句柄,指针,对象,资源的IDSetMenu(NULL);    //  先将原来的菜单拆下
MFC学习点滴三:句柄,指针,对象,资源的ID

MFC学习点滴三:句柄,指针,对象,资源的IDCMenu menu;       
// 对象
MFC学习点滴三:句柄,指针,对象,资源的ID

MFC学习点滴三:句柄,指针,对象,资源的IDmenu.LoadMenu(IDR_MAINFRAME);
MFC学习点滴三:句柄,指针,对象,资源的ID
MFC学习点滴三:句柄,指针,对象,资源的IDSetMenu(
& menu);     // 装上对象
MFC学习点滴三:句柄,指针,对象,资源的ID

MFC学习点滴三:句柄,指针,对象,资源的IDmenu.Detach();       
// 就是这里,书上说是将对象和句柄相分离
MFC学习点滴三:句柄,指针,对象,资源的ID

 

      如果没有用Detach()的话,会出现错误,因为menu是一个局部变量,在销毁之前还没有和

      IDR_MAINFRAME脱离关系,而IDR_FRAME作为一项资源,是全局存在的。

      将对象和句柄分开。menu肯定是对象,那么IDR-MAINFRAME就是句柄了。IDR_MAINFRAME是资源句柄,
       资源是存在的,一直。对象可以消灭,资源相对来说是全局的,菜单对象只是一种手段来让我们可以
      轻松的管理菜单资源,就像一个修车车间,菜单资源就像是车子,把车子装入车间,我们就可以改造
     它,改造完成以后,我们再把车子从车间里送出来。
     我们是通过菜单对象来修改菜单资源的。

 

3    资源的ID和句柄。现在的理解是:资源的ID号即是一个句柄。嘿嘿。