//globals
HBITMAP hbmp;
BITMAP bm;
WNDPROC oldproc;
//the function commands
//mdi client retrieval here blah.
//mdi is the hwnd
hbmp = (HBITMAP)LoadImage(NULL,data, IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
ZeroMemory(&bm, sizeof(BITMAP));
GetObject(hbmp, sizeof(BITMAP), (LPVOID)&bm);
//subclassing the mdi
oldproc = (WNDPROC)GetWindowLong(mdi, GWL_WNDPROC);
SetWindowLong(mdi, GWL_WNDPROC, (LONG)Newproc);
//the subclassed proc
LRESULT CALLBACK Newproc(HWND hwnd,
UINT msg, WPARAM wp, LPARAM lp)
{
switch(msg) {
case WM_SIZE:
SendMessage(hwnd, WM_ERASEBKGND, (WPARAM)GetDC(hwnd), 0);
return 1;
break;
case WM_ERASEBKGND:
HDC hdc = (HDC)wp;
RECT rect;
GetClientRect(hwnd,&rect);
HDC hcompdc = CreateCompatibleDC(NULL);
HBITMAP oldbmp = NULL;
UINT width = rect.right - rect.left;
UINT height = rect.bottom - rect.top;
oldbmp = (HBITMAP) SelectObject(hcompdc,hbmp);
UINT nx, ny;
for(nx = 0; nx < width; nx += bm.bmWidth)
for (ny = 0; ny < height; ny += bm.bmHeight)
BitBlt(hdc,nx,ny,bm.bmWidth,bm.bmHeight,hcompdc,0,0,SRCCOPY);
SelectObject(hcompdc,oldbmp);
return 1;
break;
return CallWindowProc(oldproc, hwnd, msg, wp, lp);
}
return CallWindowProc(oldproc, hwnd, msg, wp, lp);
}