说明:这是我程序的一段代码,其功能是将 001.bmp 以“透明”的效果显示出来,但是因为我这个程序需要对这一段代码调用很多次。所以造成了“ a required resource was unavailable” 这个错误,看网上说的是没有释放资源,所以我就在最下面加了释放资源的语句(注:下面带“//****”的行(hang)为为这个释放而加的语句)但是效果还和以前一样运行到同样的地方就 出现“a required resource was unavailable”,实在不懂了,请各位高手指教一下,谢谢啦!!!
HBITMAP l_hbmpBitmap=(HBITMAP)::LoadImage (NULL,“001.bmp”,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
if( l_hbmpBitmap == NULL )
{
Default() ;
return ;
}
CClientDC l_PaintDC(this);
CRect l_rcClient( 0,0,34,34);
CDC l_BufferDC ;
l_BufferDC.CreateCompatibleDC( &l_PaintDC ) ;
CBitmap l_BufferBitmap ;
l_BufferBitmap.CreateCompatibleBitmap( &l_PaintDC, l_rcClient.Width(), l_rcClient.Height() ) ;
CBitmap* l_pOldBufferBitmap = l_BufferDC.SelectObject( &l_BufferBitmap ) ; CDC l_MaskDC ;
l_MaskDC.CreateCompatibleDC( &l_PaintDC ) ;
CBitmap l_MaskBitmap ;
l_MaskBitmap.CreateBitmap( l_rcClient.Width(), l_rcClient.Height(), 1, 1, NULL ) ;
CBitmap* l_pOldMaskBitmap = l_MaskDC.SelectObject( &l_MaskBitmap ) ; #define ROP4_TRANSPARENTBLIT 0xCCAA0020
#define SRCMASK 0x00220326
CDC l_MemoryDC ;
l_MemoryDC.CreateCompatibleDC( &l_PaintDC ) ;
CBitmap* l_pOldMemoryBitmap = l_MemoryDC.SelectObject( CBitmap::FromHandle( l_hbmpBitmap ) ) ;
l_BufferDC.BitBlt( 0,0,l_rcClient.Width(), l_rcClient.Height(), &l_MemoryDC, 0,0, SRCCOPY ) ;
l_MemoryDC.SelectObject( l_pOldMemoryBitmap ) ;
COLORREF l_crOldBack = l_BufferDC.SetBkColor( RGB( 255, 0, 255 ) ) ;
l_MaskDC.BitBlt(0,0, l_rcClient.Width(), l_rcClient.Height(), &l_BufferDC, 0,0, SRCCOPY ) ;
l_BufferDC.SetBkColor( l_crOldBack ) ;
if( ! l_PaintDC.MaskBlt( posX,posY,
l_rcClient.Width(),
l_rcClient.Height(),
&l_BufferDC,
0,0,
l_MaskBitmap,
0,0,
ROP4_TRANSPARENTBLIT ) )
{
CDC l_CopyDC ;
l_CopyDC.CreateCompatibleDC( &l_PaintDC ) ;
CBitmap l_CopyBitmap ;
l_CopyBitmap.CreateCompatibleBitmap( &l_PaintDC, l_rcClient.Width(), l_rcClient.Height() ) ;
CBitmap* l_pOldCopyBitmap = l_CopyDC.SelectObject( &l_CopyBitmap ) ;
l_CopyDC.BitBlt( posX,posY, l_rcClient.Width(), l_rcClient.Height(), &l_PaintDC, posX,posY, SRCCOPY ) ;
l_CopyDC.BitBlt( posX,posY,l_rcClient.Width(), l_rcClient.Height(), &l_MaskDC,0,0, SRCAND ) ;
l_BufferDC.BitBlt(0,0,l_rcClient.Width(), l_rcClient.Height(), &l_MaskDC,0,0,SRCMASK ) ;
l_CopyDC.BitBlt(posX,posY,l_rcClient.Width(), l_rcClient.Height(), &l_BufferDC,0,0,SRCPAINT ) ;
l_PaintDC.BitBlt( posX,posY,l_rcClient.Width(), l_rcClient.Height(), &l_CopyDC, posX,posY, SRCCOPY ) ;
CClientDC dc(this);
//dc.TextOut(l_rcClient.Width(),l_rcClient.Height(),"jjj");
l_CopyDC.SelectObject( l_pOldCopyBitmap ) ;
l_CopyBitmap.DeleteObject();
l_CopyDC.DeleteDC();
}
l_MaskDC.SelectObject( l_pOldMaskBitmap ) ;
l_BufferDC.SelectObject( l_pOldBufferBitmap ) ; l_MaskBitmap.DeleteObject();//****
l_BufferBitmap.DeleteObject();//****
l_MemoryDC.DeleteDC();//****
l_MaskDC.DeleteDC();//****
l_BufferDC.DeleteDC();//**** }
}
}
HBITMAP l_hbmpBitmap=(HBITMAP)::LoadImage (NULL,“001.bmp”,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
if( l_hbmpBitmap == NULL )
{
Default() ;
return ;
}
CClientDC l_PaintDC(this);
CRect l_rcClient( 0,0,34,34);
CDC l_BufferDC ;
l_BufferDC.CreateCompatibleDC( &l_PaintDC ) ;
CBitmap l_BufferBitmap ;
l_BufferBitmap.CreateCompatibleBitmap( &l_PaintDC, l_rcClient.Width(), l_rcClient.Height() ) ;
CBitmap* l_pOldBufferBitmap = l_BufferDC.SelectObject( &l_BufferBitmap ) ; CDC l_MaskDC ;
l_MaskDC.CreateCompatibleDC( &l_PaintDC ) ;
CBitmap l_MaskBitmap ;
l_MaskBitmap.CreateBitmap( l_rcClient.Width(), l_rcClient.Height(), 1, 1, NULL ) ;
CBitmap* l_pOldMaskBitmap = l_MaskDC.SelectObject( &l_MaskBitmap ) ; #define ROP4_TRANSPARENTBLIT 0xCCAA0020
#define SRCMASK 0x00220326
CDC l_MemoryDC ;
l_MemoryDC.CreateCompatibleDC( &l_PaintDC ) ;
CBitmap* l_pOldMemoryBitmap = l_MemoryDC.SelectObject( CBitmap::FromHandle( l_hbmpBitmap ) ) ;
l_BufferDC.BitBlt( 0,0,l_rcClient.Width(), l_rcClient.Height(), &l_MemoryDC, 0,0, SRCCOPY ) ;
l_MemoryDC.SelectObject( l_pOldMemoryBitmap ) ;
COLORREF l_crOldBack = l_BufferDC.SetBkColor( RGB( 255, 0, 255 ) ) ;
l_MaskDC.BitBlt(0,0, l_rcClient.Width(), l_rcClient.Height(), &l_BufferDC, 0,0, SRCCOPY ) ;
l_BufferDC.SetBkColor( l_crOldBack ) ;
if( ! l_PaintDC.MaskBlt( posX,posY,
l_rcClient.Width(),
l_rcClient.Height(),
&l_BufferDC,
0,0,
l_MaskBitmap,
0,0,
ROP4_TRANSPARENTBLIT ) )
{
CDC l_CopyDC ;
l_CopyDC.CreateCompatibleDC( &l_PaintDC ) ;
CBitmap l_CopyBitmap ;
l_CopyBitmap.CreateCompatibleBitmap( &l_PaintDC, l_rcClient.Width(), l_rcClient.Height() ) ;
CBitmap* l_pOldCopyBitmap = l_CopyDC.SelectObject( &l_CopyBitmap ) ;
l_CopyDC.BitBlt( posX,posY, l_rcClient.Width(), l_rcClient.Height(), &l_PaintDC, posX,posY, SRCCOPY ) ;
l_CopyDC.BitBlt( posX,posY,l_rcClient.Width(), l_rcClient.Height(), &l_MaskDC,0,0, SRCAND ) ;
l_BufferDC.BitBlt(0,0,l_rcClient.Width(), l_rcClient.Height(), &l_MaskDC,0,0,SRCMASK ) ;
l_CopyDC.BitBlt(posX,posY,l_rcClient.Width(), l_rcClient.Height(), &l_BufferDC,0,0,SRCPAINT ) ;
l_PaintDC.BitBlt( posX,posY,l_rcClient.Width(), l_rcClient.Height(), &l_CopyDC, posX,posY, SRCCOPY ) ;
CClientDC dc(this);
//dc.TextOut(l_rcClient.Width(),l_rcClient.Height(),"jjj");
l_CopyDC.SelectObject( l_pOldCopyBitmap ) ;
l_CopyBitmap.DeleteObject();
l_CopyDC.DeleteDC();
}
l_MaskDC.SelectObject( l_pOldMaskBitmap ) ;
l_BufferDC.SelectObject( l_pOldBufferBitmap ) ; l_MaskBitmap.DeleteObject();//****
l_BufferBitmap.DeleteObject();//****
l_MemoryDC.DeleteDC();//****
l_MaskDC.DeleteDC();//****
l_BufferDC.DeleteDC();//**** }
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货