1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
// here i create mask and update object
HBITMAP CreateMask (HBITMAP image, COLORREF crTransparent)
{
HDC hdcMem, hdcMem2;
HBITMAP hbmMask;
BITMAP bm;
GetObject(image, sizeof (BITMAP), &bm);
hbmMask = CreateBitmap (bm.bmWidth, bm.bmHeight, 1, 1, NULL);
hdcMem = CreateCompatibleDC(0);
hdcMem2 = CreateCompatibleDC(0);
SelectObject (hdcMem2, hbmMask);
SelectObject (hdcMem, image);
SetBkColor(hdcMem, crTransparent);
BitBlt (hdcMem2, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
BitBlt (hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem2, 0, 0, SRCINVERT);
DeleteDC(hdcMem);
DeleteDC(hdcMem2);
return hbmMask;
}
void DrawObj (Object *obj, HDC hdc, RECT *pRect)
{
HDC hdcBuffer = CreateCompatibleDC (hdc);
HBITMAP hbmBuffer = CreateCompatibleBitmap (hdcBuffer, pRect->right, pRect->bottom);
HBITMAP hbmOldBuffer = (HBITMAP) SelectObject (hdcBuffer, hbmBuffer);
HDC hdcMem = CreateCompatibleDC (hdc);
HBITMAP hbmMask = (HBITMAP) SelectObject (hdcMem, obj->mask);
FillRect (hdcBuffer, pRect, (HBRUSH)GetStockObject (WHITE_BRUSH));
BitBlt(hdcBuffer, obj->x, obj->y, obj->width, obj->height, hdcMem, 0, 0, SRCAND);
SelectObject (hdcMem, obj->img);
BitBlt(hdcBuffer, obj->x, obj->y, obj->width, obj->height, hdcMem, 0, 0, SRCPAINT);
BitBlt (hdc, obj->x, obj->y, obj->width, obj->height, hdcBuffer, 0, 0, SRCCOPY);
SelectObject (hdcMem, hbmMask);
DeleteDC (hdcMem);
SelectObject (hdcBuffer, hbmOldBuffer);
DeleteDC(hdcBuffer);
DeleteObject (hbmBuffer);
return;
}
void UpdatePad(RECT *pRect,Object *pad)
{
POINT p;
if(GetCursorPos(&p))
{
pad->x = p.x;
}
}
|