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

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用GDI绘制半透明矩形相关的知识,希望对你有一定的参考价值。

[cpp] view plain copy
 
  1. /*使用GDI绘制半透明矩形*/  
  2. void CDirectXDraw::DrawHalfOpacityRect(HDC hdc,CRect rect)  
  3. {  
  4.     CDC dc;  
  5.     dc.Attach(hdc);  
  6.   
  7.     CDC cdc;   
  8.     cdc.CreateCompatibleDC( &dc );  
  9.   
  10.     CBitmap bitmap, *pOldBitmap;  
  11.     bitmap.CreateCompatibleBitmap( &dc, rect.right, rect.bottom );  
  12.     CRect src( rect );  
  13.     src.OffsetRect( CSize( -rect.left, -rect.top ) );  
  14.     pOldBitmap = cdc.SelectObject( &bitmap );  
  15.     cdc.FillSolidRect( src, RGB( 0, 0, 0 ) ); //透明色  
  16.   
  17.     if( ::AlphaBlend == 0 )  
  18.     {  
  19.         dc.BitBlt( rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, &cdc, src.left, src.top, SRCINVERT );  
  20.   
  21.     }else{  
  22.   
  23.         BLENDFUNCTION bf;      
  24.         memset( &bf, 0, sizeof( bf ) );  
  25.         bf.SourceConstantAlpha = 0x3f; //透明程度//值越大越不透明  
  26.         bf.BlendOp = AC_SRC_OVER;  
  27.   
  28.         ::AlphaBlend( dc.GetSafeHdc(), rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top,   
  29.             cdc.GetSafeHdc( ), src.left, src.top, src.right - src.left, src.bottom - src.top, bf );    
  30.     }  
  31.   
  32.     cdc.SelectObject( pOldBitmap );  
  33.   
  34.     dc.Detach();  
  35. }  

http://blog.csdn.net/lee353086/article/details/38311421

以上是关于如何使用GDI绘制半透明矩形的主要内容,如果未能解决你的问题,请参考以下文章

如何通过使用 GDI 对其颜色进行异或处理来在填充的矩形上绘制文本?

利用cv2.rectangle()绘制矩形框(python)

VB6 GDI+进阶通过拼接圆弧和线绘制圆角矩形

如何在调查表后面添加半透明矩形背景? [复制]

计算使用 GDI 渲染的文本(文本矩形)的大小

delphi 怎样绘制半透明窗体,只让窗体背景半透明,而窗体里面的控件 不透明