/*使用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(); }