I have a problem with bitmaps cutting off after being displayed. When another window moves over my program's window the bitmap is erased and the back of the window is visible.

Here's a pic to show what I mean


http://img23.imageshack.us/img23/1706/16493978.jpg


And here's the code I use to load the bitmap
Code:
int LoadFile(int XDest, int YDest, char *FileName, HWND hWnd)
{

 static BITMAPFILEHEADER *pbmfh;
 static BITMAPINFO *pbmi;
 static BYTE *pBits;
 static int cxDib, cyDib;

       DWORD dwFileSize, dwHighSize, dwBytesRead;
       HANDLE hFile;

       char *NameOfFile;
       NameOfFile = new char[50];
       NameOfFile = FileName;

       hFile = CreateFile (NameOfFile, GENERIC_READ,
       FILE_SHARE_READ, NULL,
       OPEN_EXISTING,
       FILE_FLAG_SEQUENTIAL_SCAN,
       NULL);

   dwFileSize = GetFileSize (hFile, &dwHighSize);
   pbmfh = (BITMAPFILEHEADER *) malloc (dwFileSize);
   ReadFile (hFile, pbmfh, dwFileSize, &dwBytesRead, NULL);
   pbmi = (BITMAPINFO *) (pbmfh + 1);
   pBits = (BYTE *) pbmfh + pbmfh->bfOffBits;
   cxDib = pbmi->bmiHeader.biWidth;
   cyDib = abs(pbmi->bmiHeader.biHeight);
   HDC hdc;
   hdc = GetDC (hWnd);

   SetDIBitsToDevice (hdc,
                      XDest,
                      YDest,
                      cxDib,
                      cyDib,
                      0,
                      0,
                      0,
                      cyDib,
                      pBits,
                      pbmi,
                      DIB_RGB_COLORS);
  ReleaseDC (hWnd, hdc);
  free (pbmfh);
return 0;
}
The function is called like this:

LoadFile(0, 0, "Graphics\\TITLE-SCREEN.BMP", hWnd);



What do I need to do to make the window retain it's contents when it goes behind other windows?

If it helps, here's the whole code.
Code:
#include <windows.h>
#include <malloc.h>

int Dude_Tile_X = 3;
int Dude_Tile_Y = 5;

int Dude_Pos_X;
int Dude_Pos_Y;

int LoadFile(int XDest, int YDest, char *FileName, HWND hWnd);
int DudePosX(void);
int DudePosY(void);

int DudePosX(int dudex)
{
return (dudex * 32) + 16;
}

int DudePosY(int dudey)
{
return (dudey * 32) + 16;
}

int LoadFile(int XDest, int YDest, char *FileName, HWND hWnd)
{

 static BITMAPFILEHEADER *pbmfh;
 static BITMAPINFO *pbmi;
 static BYTE *pBits;
 static int cxDib, cyDib;

       DWORD dwFileSize, dwHighSize, dwBytesRead;
       HANDLE hFile;

       char *NameOfFile;
       NameOfFile = new char[50];
       NameOfFile = FileName;

       hFile = CreateFile (NameOfFile, GENERIC_READ,
       FILE_SHARE_READ, NULL,
       OPEN_EXISTING,
       FILE_FLAG_SEQUENTIAL_SCAN,
       NULL);

   dwFileSize = GetFileSize (hFile, &dwHighSize);
   pbmfh = (BITMAPFILEHEADER *) malloc (dwFileSize);
   ReadFile (hFile, pbmfh, dwFileSize, &dwBytesRead, NULL);
   pbmi = (BITMAPINFO *) (pbmfh + 1);
   pBits = (BYTE *) pbmfh + pbmfh->bfOffBits;
   cxDib = pbmi->bmiHeader.biWidth;
   cyDib = abs(pbmi->bmiHeader.biHeight);
   HDC hdc;
   hdc = GetDC (hWnd);

   SetDIBitsToDevice (hdc,
                      XDest,
                      YDest,
                      cxDib,
                      cyDib,
                      0,
                      0,
                      0,
                      cyDib,
                      pBits,
                      pbmi,
                      DIB_RGB_COLORS);
  ReleaseDC (hWnd, hdc);
  free (pbmfh);
return 0;
}

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow )
{
WNDCLASS WndClass;
WndClass.style = 0;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 1;
WndClass.lpfnWndProc = WndProc;
WndClass.hInstance = hInstance;
WndClass.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
WndClass.hCursor = LoadCursor (NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
WndClass.lpszMenuName = 0;
WndClass.lpszClassName = "WinProg";

RegisterClass(&WndClass);
HWND hWindow;
hWindow = CreateWindow("WinProg","Window",
                       WS_OVERLAPPEDWINDOW,
                       0,0,647,433,NULL,NULL,
                       hInstance, NULL);

ShowWindow (hWindow, nCmdShow);
UpdateWindow (hWindow);
MSG Message;

while (GetMessage(&Message, NULL, 0, 0))
{
      DispatchMessage(&Message);
}
 return (Message.wParam);
}
LRESULT CALLBACK WndProc (HWND hWnd, UINT uiMessage,
                          WPARAM wParam,LPARAM lParam)
{
 switch(uiMessage)
 {
  case WM_LBUTTONDOWN:
            LoadFile(0, 0, "Graphics\\SCREEN-PURGE.BMP", hWnd);
            LoadFile(0, 0, "Graphics\\TITLE-SCREEN.BMP", hWnd);
            return 0;
            break;
  case WM_KEYDOWN:
			switch(wParam)
            {
				case VK_ESCAPE:
                     PostQuitMessage( 0 );
                     return 0;
                     break;
   	             case VK_NUMPAD4:
                 //LEFT
				 
				 if(Dude_Tile_X != 0)
				 {
				 LoadFile((DudePosX(Dude_Tile_X)), (DudePosY(Dude_Tile_Y)), "Graphics\\Tiles\\Null.bmp", hWnd);
                   Dude_Tile_X = Dude_Tile_X - 1;
                   LoadFile((DudePosX(Dude_Tile_X)), (DudePosY(Dude_Tile_Y)), "Graphics\\Tiles\\Dude_Obj.bmp", hWnd);
                 }
				  
                    return 0;
                    break;
   	             case VK_NUMPAD6:
                 //RIGHT
				 if(Dude_Tile_X != 17)
				 {
				 LoadFile((DudePosX(Dude_Tile_X)), (DudePosY(Dude_Tile_Y)), "Graphics\\Tiles\\Null.bmp", hWnd);
                   Dude_Tile_X = Dude_Tile_X + 1;
                   LoadFile((DudePosX(Dude_Tile_X)), (DudePosY(Dude_Tile_Y)), "Graphics\\Tiles\\Dude_Obj.bmp", hWnd);
                 }
				 return 0;
                    break;
   	             case VK_NUMPAD8:
                 //UP
				 if(Dude_Tile_Y != 0)
				 {
				 LoadFile((DudePosX(Dude_Tile_X)), (DudePosY(Dude_Tile_Y)), "Graphics\\Tiles\\Null.bmp", hWnd);
                   Dude_Tile_Y = Dude_Tile_Y - 1;
                   LoadFile((DudePosX(Dude_Tile_X)), (DudePosY(Dude_Tile_Y)), "Graphics\\Tiles\\Dude_Obj.bmp", hWnd);
                 }
                   return 0;
                    break;
   	             case VK_NUMPAD2:
                 //DOWN
				 if(Dude_Tile_Y != 7)
				 {
				 LoadFile((DudePosX(Dude_Tile_X)), (DudePosY(Dude_Tile_Y)), "Graphics\\Tiles\\Null.bmp", hWnd);
                   Dude_Tile_Y = Dude_Tile_Y + 1;
                   LoadFile((DudePosX(Dude_Tile_X)), (DudePosY(Dude_Tile_Y)), "Graphics\\Tiles\\Dude_Obj.bmp", hWnd);
                 }
                   return 0;
                    break;
   	             case VK_NUMPAD5:
                 //WAIT
            LoadFile(0, 0, "Graphics\\SCREEN-PURGE.BMP", hWnd);
            LoadFile(0, 0, "Graphics\\HUD-RESET.BMP", hWnd);
                   LoadFile((DudePosX(Dude_Tile_X)), (DudePosY(Dude_Tile_Y)), "Graphics\\Tiles\\Dude_Obj.bmp", hWnd);
                    return 0;
                    break;
                 default:
                 return 0;
                 break;
           }
   LoadFile((DudePosX(Dude_Tile_X)), (DudePosY(Dude_Tile_Y)), "Graphics\\Tiles\\Dude_Obj.bmp", hWnd);
   return 0;
   break;
 case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
      break;
 default:
      return DefWindowProc (hWnd, uiMessage,
                            wParam, lParam);
   }
}