如何使用GDI绘制半透明矩形
- /*使用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