bool MyTransparentBlt(HDC backDC,int x1,int y1,int w1,int h1,HDC foreDC,int x2,int y2,int w2,int h2,UINT TransColor)
{
HDC maskDC = CreateCompatibleDC(0); // '1.建立單色mask DC
HBITMAP maskBitmap = CreateBitmap(w2, h2, 1, 1, 0);//建立與前景圖大小相同的HBITMAP
SelectObject( maskDC, maskBitmap);//maskBitmap選入maskDC
SetBkColor( foreDC, TransColor); //'2.把前景圖的背景色設爲透明色
BitBlt (maskDC, x1, y1, w1, h1, foreDC, x2, y2, SRCCOPY); //'3.copy前景圖到單色DC得到mask
SetBkColor( foreDC, RGB(0, 0, 0));// '4.把前景圖與mask圖作與運算
SetTextColor (foreDC, RGB(255, 255, 255));//設置前景圖前景顏色爲全1
BitBlt (foreDC, x1, y1, w1, h1, maskDC, x2, y2, SRCAND);
SetBkColor( backDC, RGB(255, 255, 255) );// '5.把背景圖與mask圖作與運算
SetTextColor (backDC, RGB(0, 0, 0));//設置背景圖前景顏色爲全0
BitBlt( backDC, x1, y1, w1, h1, maskDC, x2, y2, SRCAND);
//'6.把前景圖和背景圖作或運算
BitBlt( backDC,x1, y1, w1, h1, foreDC, x2, y2, SRCPAINT);
SelectObject(maskDC, maskBitmap);
DeleteDC(maskDC);
DeleteObject(maskBitmap);
return true;
}
bool MyTransparentBlt2(HDC backDC,int x1,int y1,int w1,int h1,HDC foreDC,int x2,int y2,int w2,int h2,UINT TransColor)
{
HDC maskDC = CreateCompatibleDC(0); // '1.建立單色mask DC
HBITMAP maskBitmap = CreateBitmap(w2, h2, 1, 1, 0);//建立與前景圖大小相同的HBITMAP
SelectObject( maskDC, maskBitmap);//maskBitmap選入maskDC
SetBkColor( foreDC, TransColor); //'2.把前景圖的背景色設爲透明色
//StretchBlt (maskDC, x1, y1, w1, h1, foreDC, x2, y2, w2,h2,SRCCOPY); //'3.copy前景圖到單色DC得到mask
if (w1==w2&&h1==h2)
BitBlt(maskDC, x1, y1, w1, h1, foreDC, w2,h2,SRCCOPY);
else
StretchBlt(maskDC, x1, y1, w1, h1, foreDC, x2, y2, w2,h2,SRCCOPY);
SetBkColor( foreDC, RGB(0, 0, 0));// '4.把前景圖與mask圖作與運算
SetTextColor (foreDC, RGB(255, 255, 255));//設置前景圖前景顏色爲全1
BitBlt (foreDC, x1, y1, w1, h1, maskDC, w2,h2,SRCAND);
SetBkColor( backDC, RGB(255, 255, 255) );// '5.把背景圖與mask圖作與運算
SetTextColor (backDC, RGB(0, 0, 0));//設置背景圖前景顏色爲全0
BitBlt ( backDC, x1, y1, w1, h1, maskDC, w2,h2,SRCAND);
//'6.把前景圖和背景圖作或運算
BitBlt ( backDC,x1, y1, w1, h1, foreDC, w2,h2, SRCPAINT);
SelectObject(maskDC, maskBitmap);
DeleteDC(maskDC);
DeleteObject(maskBitmap);
return true;
}
BOOL CMFCtestDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnEraseBkgnd(pDC);
CDC cdc;
cdc.CreateCompatibleDC(pDC);
cdc.SelectObject(&cbmp1);
BITMAP bmp;
cbmp2.GetBitmap(&bmp);
CRect rect;
GetClientRect(&rect);
MyTransparentBlt2(pDC->m_hDC,0,0,bmp.bmWidth,bmp.bmHeight,
cdc.m_hDC,0,0,bmp.bmWidth,bmp.bmHeight,GetPixel(cdc.m_hDC,46,46));
cdc.DeleteDC();
return true;
//return CDialog::OnEraseBkgnd(pDC);
}