透過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; }