您的位置:首页 > 其它

如何使用GDI绘制半透明矩形

2017-10-07 21:14 477 查看
[cpp] view plain copy

/*使用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://blog.csdn.net/lee353086/article/details/38311421
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: