#define WIN32_LEAN_AND_MEAN
#define STRICT
#define _WIN32_WINNT 0x0500
#define WINVER       0x0500


#include <windows.h>


void Err(void)
{
  LPVOID lpMsgBuf;
  FormatMessage( 
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM | 
    FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL,
    GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    (LPTSTR) &lpMsgBuf,
    0,
    NULL 
  );
  // Process any inserts in lpMsgBuf.
  // ...
  // Display the string.
  MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
  // Free the buffer.
  LocalFree( lpMsgBuf );
}

LRESULT CALLBACK MyWindowProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
  return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{
  char className[]  = "My Class";
  char className2[] = "My Class2";

  WNDCLASS myClass;
  myClass.cbClsExtra    = 0;
  myClass.cbWndExtra    = 0;
  myClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
  myClass.hCursor       = LoadCursor(0,IDC_ARROW);
  myClass.hIcon         = LoadIcon(0,IDI_APPLICATION);
  myClass.hInstance     = hInstance;
  myClass.lpfnWndProc   = MyWindowProc;
  myClass.lpszClassName = className;
  myClass.lpszMenuName  = 0;
  myClass.style         = CS_HREDRAW | CS_VREDRAW;

  WNDCLASS myClass2;
  myClass2.cbClsExtra    = 0;
  myClass2.cbWndExtra    = 0;
  myClass2.hbrBackground = 0;
  myClass2.hCursor       = 0;
  myClass2.hIcon         = 0;
  myClass2.hInstance     = hInstance;
  myClass2.lpfnWndProc   = DefWindowProc;
  myClass2.lpszClassName = className2;
  myClass2.lpszMenuName  = 0;
  myClass2.style         = 0;

  if (!RegisterClass(&myClass2))
  {
    Err();
  }
  else
  {
    if (!RegisterClass(&myClass))
    {
      Err();
    }
    else
    {
      HWND wind = 0;
      HWND hidden = 0;

      if (!(hidden = CreateWindowEx(
        0,
        className2,
        "WibbleHidden",
        0,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        0,
        0,
        0, // ignored
        0)))
      {
        Err();
      }
      else
      {
        if (!(wind = CreateWindowEx(
          0,
          className,
          "Wibble",
          WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE,
          CW_USEDEFAULT,
          CW_USEDEFAULT,
          400,
          200,
          hidden,
          0,
          0, // ignored
          0)))
        {
          Err();
        }
        else
        {
          Sleep(5000);
          DestroyWindow(wind);
        }

        DestroyWindow(hidden);
      }

      UnregisterClass(className,hInstance);
    }

    UnregisterClass(className2,hInstance);
  }

  return 0;
}
