zoukankan      html  css  js  c++  java
  • CBitmap Detach DeleteObject关系

         CBitmap Detach DeleteObject关系
           http://blog.sina.com.cn/s/blog_4b3c1f950100ggdx.html


            注意:当使用完资源后,必须通过调用函数以释放加速器表、位图、光标、图标以及菜单所占的内存资源;
               加速器表:DesteoyAcceleratorTable;
               位图:DeleteObject;光标:DestroyCursor;
               图标:Destroylcon;菜单:DestroyMenu
            HBITMAP/CBitmap/BITMAP 三者之间的关系转换:
               HBITMAP hBitmap;
               CBitmap bitmap;
               BITMAP bm;
               bitmap.Attach(hBitmap);//由HBITMAP 得到关联的CBitmap
               bitmap.GetBitmap(&bm); // 由CBitmap 得到关联的BITMAP
               hBitmap=(HBITMAP)bitmap.GetSafeHandle();//由CBitmap得到相关的HBITMAP
               
            延伸理解下Attach/Detach:
                attach是把一个C++对象与一个WINDOWS对象关联,直到用detach则把关联去掉。 
                如果attach了以后没有detach,则C++对象销毁的时候WINDOWS对象跟着一起完蛋。 
                attach了以后,C++对象的指针和WINDOWS对象的HWND会有一个映射关系,其作用相当于你直接用一个C++对象去Create一个WINDOWS对象,例如   CEdit   edit;   edit.create(...) 
                并且此映射是永久的,知道此对象完蛋为止。 
                如果用类似GetDlgItem函数也可以返回一个指针,并可以强制转换。GetDlgItem会到映射表里找。 
                有2种映射表,一中是永久的,一种是临时的。 
                直接用C++对象创建的WINDOWS对象或者是通过attach的对象的映射关系都被放到永久表中,否则就在临时表中创建映射。 
                所以GetDlgItem不推荐你保存返回的指针,因为你很难保证你的WINDOWS对象跟C++对象的关联是否放在永久表中。 
                如果映射是放在临时表中,那么在空闲时间会被自动删除。 
                用attcah完全是为了方便用MFC类的成员函数去操纵WINDOWS对象。

  • 相关阅读:
    1082 射击比赛 (20 分)
    1091 N-自守数 (15 分)
    1064 朋友数 (20 分)
    1031 查验身份证 (15 分)
    1028 人口普查 (20 分)
    1059 C语言竞赛 (20 分)
    1083 是否存在相等的差 (20 分)
    1077 互评成绩计算 (20 分)
    792. 高精度减法
    791. 高精度加法
  • 原文地址:https://www.cnblogs.com/carl2380/p/1936913.html
Copyright © 2011-2022 走看看