透過blt
BOOL TransparentBlt(
hdc hdcDest,
int nXOrgDest,
int nYOrgDest,
int nWidthDest,
int hHeightDest,
hdc hdcSrc,
int nXOrgSrc,
int nYOrgSrc,
int nWidthSrc,
int nHeightSrc,
COLORREF crTransparent
)
{
hdc hdcMask, hdcRMask;// マスク用DC
HBITMAP hBmpMask, hBmpRMask; // マスク用ビットマップ
COLORREF crOld; // 直前の背景色
hdcMask = CreateCompatibleDC(hdcDest);
hBmpMask = CreateBitmap(nWidthSrc, nHeightSrc, 1, 1, NULL);
SaveDC(hdcMask);
SelectObject(hdcMask, hBmpMask);
hdcRMask = CreateCompatibleDC(hdcSrc);
hBmpRMask = CreateCompatibleBitmap(hdcSrc, nWidthSrc, nHeightSrc);
SaveDC(hdcRMask);
SelectObject(hdcRMask, hBmpRMask);
// Mask 作成
crOld = SetBkColor(hdcSrc, crTransparent);
BitBlt(hdcMask, 0, 0, nWidthSrc, nHeightSrc, hdcSrc, nXOrgSrc, nYOrgSrc, SRCCOPY); // マスク作成
SetBkColor(hdcSrc, crOld);
// (! Mask) & (Src) 透明色以外の部分のデータ作成
BitBlt(hdcRMask, 0, 0, nWidthSrc, nHeightSrc, hdcSrc, nXOrgSrc, nYOrgSrc, SRCCOPY);
BitBlt(hdcRMask, 0, 0, nWidthSrc, nHeightSrc, hdcMask, nXOrgSrc, nYOrgSrc, 0x220326); // DSna
// 転送
StretchBlt(hdcDest, nXOrgDest, nYOrgDest, nWidthDest, nHeightDest, hdcMask, 0, 0, nWidthSrc, nHeightSrc, SRCAND);
StretchBlt(hdcDest, nXOrgDest, nYOrgDest, nWidthDest, nHeightDest, hdcRMask, 0, 0, nWidthSrc, nHeightSrc, SRCINVERT);
RestoreDC(hdcMask, -1);
RestoreDC(hdcRMask, -1);
DeleteObject(hBmpMask);
DeleteObject(hBmpRMask);
return TRUE;
}