title: CreateWindowEx returns NULL
body: <p>The following is a portion of my code. Every time I run the program, <code>CreateWindowEx</code> of the SPanel returns <code>NULL</code>, triggering an error. Can anyone see what is wrong with this piece of code? </p>
  
  <p><code>SPanelProc</code> and <code>MainWndProc</code> are declared already, and is of the prototype <code>LRESULT CALLBACK SPanelProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);</code>.</p>
  
  <p>The environment I'm programming in is Visual C++ 2010.</p>
  
  <p>Why is <code>CreateWindowEx</code> always returning <code>NULL</code>?</p>
  
  <pre><code>#include &lt;Windows.h&gt;
  #include &lt;WindowsX.h&gt;
  
  LRESULT CALLBACK SPanelProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
  {
      switch (msg)
      {
          case WM_MOUSEMOVE:
  
          break;
      }
  
      return 0;
  }
  
  void Init ()
  {
      HWND child;
      HINSTANCE hInstance = (HINSTANCE)(GetWindowLongPtr (parent, GWLP_HINSTANCE));
      WNDCLASSEX wc;
      const char PanelClassName[] = "SPanel"; //ClassName of the panel. Do not reuse on another window
  
      //Create the window, initialize GWLP_USERDATA, check for errors, register the window class, and hide the window
  
  
      //Create the windowclass for the button
      wc.cbSize        = sizeof (WNDCLASSEX);
      wc.style         = 0;
      wc.lpfnWndProc   = SPanelProc;
      wc.cbClsExtra    = 0;
      wc.cbWndExtra    = 0;
      wc.hInstance     = hInstance;
      wc.hIcon         = LoadIcon (hInstance, IDI_APPLICATION);
      wc.hCursor       = LoadCursor (hInstance, IDC_ARROW);
      wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
      wc.lpszMenuName  = NULL;
      wc.lpszClassName = PanelClassName;
      wc.hIconSm       = LoadIcon (hInstance, IDI_APPLICATION);
  
      //If could not register window class
      if(!RegisterClassEx (&amp;wc))
      {
          MessageBox (NULL, "Panel registration failed!", "Error!", MB_OK);
          PostQuitMessage (0);
          return;
      }
  
      //Create window
      child = CreateWindowEx (WS_EX_NOPARENTNOTIFY, PanelClassName, "TITLE_TEXT", WS_CHILD, 0, 0, 400, 200, parent, NULL, hInstance, NULL);
  
      //Check for error in window creation
      if (child == NULL)
      {
          MessageBox (NULL, "Panel creation failed!", "Error!", MB_OK);
          PostQuitMessage (0);
          return;
      }
  
      return;
  }
  
  
  int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  {
      WNDCLASSEX wc;
      HWND hWnd;
      MSG Msg;
      int length, width;
  
      //Register the window, create the window, and check for errors
      {
          //Window class
          wc.cbSize        = sizeof (WNDCLASSEX);
          wc.style         = 0;
          wc.lpfnWndProc   = MainWndProc;
          wc.cbClsExtra    = 0;
          wc.cbWndExtra    = 0;
          wc.hInstance     = hInstance; //Instance used to create the window
          wc.hIcon         = LoadIcon (hInstance, MAKEINTRESOURCE (IDI_CODERICON)); //Change here to change large application icon
          wc.hCursor       = LoadCursor (hInstance, IDC_ARROW); //Change here to change application cursor
          wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); //Change here to change starting background color (white)
          wc.lpszMenuName  = NULL;
          wc.lpszClassName = Coder::Constants::MAINWNDCLASSNAME;
          wc.hIconSm       = (HICON)LoadImage (hInstance, MAKEINTRESOURCE (IDI_CODERICON), IMAGE_ICON, GetSystemMetrcs (SM_CXSMICON), GetSystemMetrics (SM_CYSMICON), 0); //Change here to change application icon (small, as in taskbar)
  
          //Register the window class so that the ClassName can be used to create the window and then check for error
          if (!RegisterClassEx (&amp;wc))
          {
              MessageBox (NULL, "Main window registration failed!", "Error!", MB_OK);
              return 0;
          }
  
          //Get screen dimensions
          length = GetSystemMetrics (SM_CXSCREEN);
          width = GetSystemMetrics (SM_CYSCREEN);
  
          //Create window
          hWnd = CreateWindowEx (WS_EX_CLIENTEDGE, /*Border*/
              Coder::Constants::MAINWNDCLASSNAME,
              Coder::Constants::MAINWNDTITLETEXT, /*Title of window*/
              WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX | WS_THICKFRAME | WS_CLIPCHILDREN, /*Window style*/
              (length - Coder::Constants::XDEFAULT - Coder::Constants::XSHIFT) / 2, (width - Coder::Constants::YDEFAULT - Coder::Constants::YSHIFT) / 2, /*Top-left x and y coordinates*/
              Coder::Constants::XDEFAULT + Coder::Constants::XSHIFT, Coder::Constants::YDEFAULT + Coder::Constants::YSHIFT, /*Lengths and widths of window*/
              NULL, NULL, 
              hInstance, NULL);
  
          //Check for error in window creation
          if (hWnd == NULL)
          {
              MessageBox (NULL, "Main window creation failed!", "Error!", MB_OK);
              return 0;
          }
      }
  
      //Call function
              Init (hWnd);
  
      //Show and redraw the window
      ShowWindow (hWnd, nCmdShow);
      UpdateWindow (hWnd);
  
      //Put window in message loop
      while (GetMessage (&amp;Msg, NULL, 0, 0) &gt; 0) //While not terminated
      {
          TranslateMessage (&amp;Msg);
          DispatchMessage (&amp;Msg);
      }
  
      //Return
      return static_cast&lt;int&gt;(Msg.wParam);
  }
  </code></pre>