如何使用GDI绘制半透明矩形
void CDirectXDraw::DrawHalfOpacityRect(HDC hdc,CRect rect)
{
CDC dc;
dc.Attach(hdc);
CDC cdc;
cdc.CreateCompatibleDC( &dc );
CBitmap bitmap, *pOldBitmap;
bitmap.CreateCompatibleBitmap( &dc, rect.right, rect.bottom );
CRect src( rect );
src.OffsetRect( CSize( -rect.left, -rect.top ) );
pOldBitmap = cdc.SelectObject( &bitmap );
cdc.FillSolidRect( src, RGB( 0, 0, 0 ) );
if( ::AlphaBlend == 0 )
{
dc.BitBlt( rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, &cdc, src.left, src.top, SRCINVERT );
}else{
BLENDFUNCTION bf;
memset( &bf, 0, sizeof( bf ) );
bf.SourceConstantAlpha = 0x3f;
bf.BlendOp = AC_SRC_OVER;
::AlphaBlend( dc.GetSafeHdc(), rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top,
cdc.GetSafeHdc( ), src.left, src.top, src.right - src.left, src.bottom - src.top, bf );
}
cdc.SelectObject( pOldBitmap );
dc.Detach();
}
来源: http://www.bubuko.com/infodetail-2340676.html