title: C++ Winapi Listbox string with space ends up in new line
body: <p>Quick question, if I create a ListBox and add a string with a space in it to the listbox, the listbox ends up pretty messy because everything after the space will be added into the next line. In this case shown below it's even worse, because the full amount of numbers is not added to the listbox due to this problem. Is it a problem caused by the converting process of a string to a char? How can i prevent it from happening? </p>
  
  <p>Here is the code i use for the Listbox and the adding Process: </p>
  
  <pre><code>case WM_CREATE:
  {
  
  
      LBTest = CreateWindowEx(WS_EX_CLIENTEDGE
          , L"LISTBOX",NULL
          , WS_CHILD | WS_VISIBLE | WS_VSCROLL| LBS_NOTIFY
          , 7, 7, 300, 600
          , hWnd, (HMENU)19, hInst, NULL);
      std::wstring str,str2=L"Item Number ";
      std::wstringstream ss;
      for (int l = 0; l &lt; 210; l++)
      {
          ss &lt;&lt;str2&lt;&lt; std::to_wstring(l);
          ss &gt;&gt; str;
          int pos = SendMessage(LBTest, LB_ADDSTRING, 0, (LPARAM)str.c_str());
          SendMessage(LBTest, LB_SETITEMDATA, pos, (LPARAM)l);
  
      }
  
      break;
  }
  </code></pre>
  
  <p>Here is the full code :</p>
  
  <pre><code>#include "stdafx.h"
  #include "Testproject.h"
  #include &lt;iostream&gt;
  #include &lt;string&gt;
  #include &lt;thread&gt;
  #include &lt;sstream&gt;
  
  
  #define MAX_LOADSTRING 100
  const UINT WM_WINDOW_UPDATE = WM_APP + 0;
  
  HINSTANCE hInst;                               
  WCHAR szTitle[MAX_LOADSTRING];                
  WCHAR szWindowClass[MAX_LOADSTRING];            
  HWND Button1,LBTest;
  
  
  
  ATOM                MyRegisterClass(HINSTANCE hInstance);
  BOOL                InitInstance(HINSTANCE, int);
  LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
  INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
  INT_PTR CALLBACK ListBoxExampleProc(HWND, UINT,
  WPARAM, LPARAM);
  
  
  
  
  int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                   _In_opt_ HINSTANCE hPrevInstance,
                   _In_ LPWSTR    lpCmdLine,
                   _In_ int       nCmdShow)
  {
  UNREFERENCED_PARAMETER(hPrevInstance);
  UNREFERENCED_PARAMETER(lpCmdLine);
  
  
  
  
  LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  LoadStringW(hInstance, IDC_TESTPROJECT, szWindowClass, MAX_LOADSTRING);
  MyRegisterClass(hInstance);
  
  
  if (!InitInstance (hInstance, nCmdShow))
  {
      return FALSE;
  }
  
  HACCEL hAccelTable = LoadAccelerators(hInstance,   MAKEINTRESOURCE(IDC_TESTPROJECT));
  
  MSG msg;
  
  
  while (GetMessage(&amp;msg, nullptr, 0, 0))
  {
      if (!TranslateAccelerator(msg.hwnd, hAccelTable, &amp;msg))
      {
          TranslateMessage(&amp;msg);
          DispatchMessage(&amp;msg);
      }
  }
  
  return (int) msg.wParam;
  }
  
  ATOM MyRegisterClass(HINSTANCE hInstance)
  {
  WNDCLASSEXW wcex;
  
  wcex.cbSize = sizeof(WNDCLASSEX);
  
  wcex.style          = CS_HREDRAW | CS_VREDRAW;
  wcex.lpfnWndProc    = WndProc;
  wcex.cbClsExtra     = 0;
  wcex.cbWndExtra     = 0;
  wcex.hInstance      = hInstance;
  wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TESTPROJECT));
  wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
  wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
  wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_TESTPROJECT);
  wcex.lpszClassName  = szWindowClass;
  wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  
  return RegisterClassExW(&amp;wcex);
  }
  
  
  BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  {
  hInst = hInstance; //
  
  HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
  
  if (!hWnd)
  {
    return FALSE;
  }
  
  ShowWindow(hWnd, nCmdShow);
  UpdateWindow(hWnd);
  
  return TRUE;
  }
  
  LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  {
  switch (message)
  {
  case WM_CREATE:
  {
  
  
      LBTest = CreateWindowEx(WS_EX_CLIENTEDGE
          , L"LISTBOX",NULL
          , WS_CHILD | WS_VISIBLE | WS_VSCROLL| LBS_NOTIFY
          , 7, 7, 300, 600
          , hWnd, (HMENU)19, hInst, NULL);
      std::wstring str,str2=L"Item Number ";
      std::wstringstream ss;
      for (int l = 0; l &lt; 210; l++)
      {
          ss.clear()
          ss &lt;&lt;str2&lt;&lt; std::to_wstring(l);
          ss &gt;&gt; str;
          int pos = SendMessage(LBTest, LB_ADDSTRING, 0, (LPARAM)str.c_str());
          SendMessage(LBTest, LB_SETITEMDATA, pos, (LPARAM)l);
  
      }
  
      break;
  }
  case WM_COMMAND:
      {
          int wmId = LOWORD(wParam);
  
          switch (wmId)
          {
          case IDM_ABOUT:
              DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
              break;
          case IDM_EXIT:
              DestroyWindow(hWnd);
              break;
  
          default:
              return DefWindowProc(hWnd, message, wParam, lParam);
          }
      }
      break;
  case WM_PAINT:
      {
          PAINTSTRUCT ps;
          HDC hdc = BeginPaint(hWnd, &amp;ps);
          //TODO: Zeichencode, der hdc verwendet, hier einfügen...
  
  
  
          EndPaint(hWnd, &amp;ps);
      }
      break;
  case WM_DESTROY:
      PostQuitMessage(0);
      break;
  default:
      return DefWindowProc(hWnd, message, wParam, lParam);
  }
  return 0;
  }
  
  
  INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  {
  UNREFERENCED_PARAMETER(lParam);
  switch (message)
  {
  case WM_INITDIALOG:
      return (INT_PTR)TRUE;
  
  case WM_COMMAND:
      if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
      {
          EndDialog(hDlg, LOWORD(wParam));
          return (INT_PTR)TRUE;
      }
      break;
  }
  return (INT_PTR)FALSE;
  }
  </code></pre>
  
  <p>Listbox result:</p>
  
  <p><a href="https://i.stack.imgur.com/DaOlx.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/DaOlx.png" alt="enter image description here"></a></p>