Ok, I'm just trying to draw a .bmp onto an MDI Client background. Here is my code. which isn't working. Need to know why.

Code:
//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);
}
  



so why isnt this working? Thanks