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 + -
显示快捷键?