transparent.c
来自「VC++编程宝典,电子工业出版社出版,源代码,第一部分」· C语言 代码 · 共 50 行
C
50 行
void DrawTransparent( int x, int y, CDC *pDC, CBitmap *pBitmap, COLORREF Color )
{
BITMAP bm;
pBitmap->GetObject( sizeof( BITMAP ), &bm );
CDC ImageDC;
ImageDC.CreateCompatibleDC( pDC );
CBitmap *pOldImageBitmap = ImageDC.SelectObject( pBitmap );
CDC MaskDC;
MaskDC.CreateCompatibleDC( pDC );
CBitmap MaskBitmap;
MaskBitmap.CreateBitmap( bm.bmWidth, bm.bmHeight, 1, 1, NULL );
CBitmap *pOldMaskBitmap = MaskDC.SelectObject( &MaskBitmap );
ImageDC.SetBkColor( Color );
MaskDC.BitBlt( 0, 0, bm.bmWidth, bm.bmHeight, &ImageDC, 0, 0, SRCCOPY );
CDC OrDC;
OrDC.CreateCompatibleDC( pDC );
CBitmap OrBitmap;
OrBitmap.CreateCompatibleBitmap( &ImageDC, bm.bmWidth, bm.bmHeight );
CBitmap *pOldOrBitmap = OrDC.SelectObject( &OrBitmap );
OrDC.BitBlt( 0, 0, bm.bmWidth, bm.bmHeight, &ImageDC, 0, 0, SRCCOPY );
OrDC.BitBlt( 0, 0, bm.bmWidth, bm.bmHeight, &MaskDC, 0, 0, 0x220326 );
CDC TempDC;
TempDC.CreateCompatibleDC( pDC );
CBitmap TempBitmap;
TempBitmap.CreateCompatibleBitmap( &ImageDC, bm.bmWidth, bm.bmHeight );
CBitmap *pOldTempBitmap = TempDC.SelectObject( &TempBitmap );
TempDC.BitBlt( 0, 0, bm.bmWidth, bm.bmHeight, pDC, x, y, SRCCOPY );
TempDC.BitBlt( 0, 0, bm.bmWidth, bm.bmHeight, &MaskDC, 0, 0, SRCAND );
TempDC.BitBlt( 0, 0, bm.bmWidth, bm.bmHeight, &OrDC, 0, 0, SRCPAINT );
pDC->BitBlt( x, y, bm.bmWidth, bm.bmHeight, &TempDC, 0, 0, SRCCOPY );
TempDC.SelectObject( pOldTempBitmap );
OrDC.SelectObject( pOldOrBitmap );
MaskDC.SelectObject( pOldMaskBitmap );
ImageDC.SelectObject( pOldImageBitmap );
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?