CPaintDC dc(this);
CRect rcclient;
GetClientRect(&rcclient);
// create a compatible memory dc
CDC memdc;
memdc.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());
memdc.SelectObject( &bitmap );
DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0);
CDC maskdc;
maskdc.CreateCompatibleDC(&dc);
CBitmap maskbitmap;
maskbitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());
maskdc.SelectObject( &maskbitmap );
CBrush brush;
brush.CreatePatternBrush(&m_bitmap);
maskdc.FillRect(rcclient, &brush);
maskdc.BitBlt(0,0,rcclient.Width(), rcclient.Height(),&memdc,0,0,SRCAND);
dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
&maskdc,rcclient.left, rcclient.top,SRCCOPY);
DeleteObject(brush);
DeleteObject(maskbitmap);
DeleteObject(rcclient);
DeleteObject(rcClip);
DeleteObject(rcClient);
DeleteObject(bitmap);
maskdc.SelectClipRgn(NULL);
DeleteDC(memdc);
DeleteDC(maskdc);
DeleteDC(dc);