Code:
__declspec(dllexport) void
_NebGDI::DrawSpriteEx(HBITMAP hbitmap, HDC hdcTarget, int X, int Y, DWORD dwRaster)
{
HBITMAP hbmMask;
HDC hdcMem, hdcMem2;
HBITMAP hbmOld, hbmOld2;
BITMAP bmp;
GetObject(hbitmap, sizeof(BITMAP), &bmp);
hbmMask = CreateBitmap(bmp.bmWidth, bmp.bmHeight, 1,1, NULL);
hdcMem = CreateCompatibleDC(0);
hdcMem2= CreateCompatibleDC(0);
hbmOld = (HBITMAP)SelectObject(hdcMem, hbitmap);
hbmOld2= (HBITMAP)SelectObject(hdcMem2, hbmMask);
SetBkColor(hdcMem, RGB(255,0,255));
BitBlt(hdcMem2, 0, 0, bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCCOPY);
BitBlt(hdcMem, 0, 0, bmp.bmWidth, bmp.bmHeight, hdcMem2, 0, 0, SRCINVERT);
SelectObject(hdcMem, hbmMask);
BitBlt(hdcTarget, X, Y, bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCAND);
SelectObject(hdcMem, hbitmap);
BitBlt(hdcTarget, X, Y, bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCPAINT);
SelectObject(hdcMem, hbmOld);
SelectObject(hdcMem2, hbmOld2);
DeleteDC(hdcMem);
DeleteDC(hdcMem2);
DeleteObject(hbmMask);
}