MFC的GDI对象的构造与释放

首先要区分c++对象与GDI对象。GDI对象对应于系统资源,例如一个窗口,GDI对象就是这个窗口分配的一块内存,而这块内存由句柄标识;c++对象只是封装了这个句柄,例如CWinApp类封装了m_hInstance, CWnd封装了m_hWnd。

 

一、设备上下文(DC)

CDC对象封装了设备上下文的一个句柄m_hDC,如果通过GetDC();来操作设备上下文,一定要在退出函数时调用ReleaseDC();

GetDC();相当于获得了一个当前设备上下文的一个副本,调用它是会重新分配内存的,ReleaseDC();相当于将新分配的内存释放掉。

 

如果CClientDC来操作设备上下文,那么它会在对象的析构函数中调用ReleaseDC();

 

二、一般GDI对象(画刷、字体、位图、笔...)

如果通过全局函数来加载,例如

HBITMAP hBitmap;	
hBitmap = LoadBitmap(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDB_BITMAP1));	
//将其选入设备上下文	
// ...	
// ...
DeleteObject(hBitmap);


 一定要在使用后调用DeleteObject(hBitmap);

虽然其并没为资源新分配内存,但会让句柄值设为NULL,毕竟句柄值的资源有限。

CSDN上的原话:The application must call the DeleteObject function to delete each bitmap handle returned by theLoadBitmap function

 

 如果是通过c++对象来加载资源,例如: 

CBitmap bitmap;//局部变量
 bitmap.LoadBitmap(IDB_BITMAP1);

在CBitmap中的析构函数中会调用DeleteObject。


 

       


                
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值