title: How to append text to a TextBox?
body: <p>I think the following code should be self-explanatory.  </p>
  
  <pre><code>#include &lt;Windows.h&gt;
  
  static HWND textBoxInput;
  static HWND button;
  static HWND textBoxOutput;
  
  LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  
  int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR cmdLine,int nCmdShow)
  {
      HWND hMainWindow;
      WNDCLASS wc = {};
      wc.lpfnWndProc = WindowProc;
      wc.lpszClassName = "Main's window class";
      wc.hInstance = hInstance;
      RegisterClass(&amp;wc);
  
  
      hMainWindow = CreateWindow(wc.lpszClassName,"Append text main window",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,500,400,NULL,NULL,hInstance,NULL);
  
      error=GetLastError();
  
      if(hMainWindow == NULL) return 1;
  
      textBoxInput = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", NULL,WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, 10, 10, 300, 21, hMainWindow, NULL, NULL, NULL);
  
      button = CreateWindowEx(WS_EX_CLIENTEDGE,"Button","Append",WS_CHILD | WS_VISIBLE | ES_CENTER, 10, 41,75,30,hMainWindow,NULL,NULL,NULL); 
  
      textBoxOutput = CreateWindowEx(WS_EX_CLIENTEDGE,"Edit",TEXT("-&gt;This content is untouchable and unreadable!&lt;-"),WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_AUTOVSCROLL |  ES_MULTILINE | ES_READONLY ,10,81,500,90,hMainWindow,NULL,NULL,NULL);
  
  
      ShowWindow(hMainWindow,SW_SHOW);
  
      MSG msg = { };
  
      while (GetMessage(&amp;msg, NULL, 0, 0))
      {
          TranslateMessage(&amp;msg);
          DispatchMessage(&amp;msg);
      }
  
      return 0;
  }
  
  LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  {
      switch(uMsg)
      {
          case WM_COMMAND:
          if((HWND)lParam == button)
          {               
              TCHAR* buffer = new TCHAR[150];
  
              GetWindowText(textBoxInput,buffer,150);
  
              SetWindowText(textBoxOutput,buffer);
              //AppendWindowText(textBoxOutput,buffer,150) - I haven't found such function;           
                      delete [] buffer;       
          }
          break;
  
          case WM_PAINT:          
              {
              PAINTSTRUCT ps;
              HDC hdc = BeginPaint(hwnd, &amp;ps);
              HBRUSH pedzel;
  
              pedzel = CreateSolidBrush(RGB(10,250,10));
  
              FillRect(hdc, &amp;ps.rcPaint, pedzel);
  
              EndPaint(hwnd, &amp;ps);
              return 0;
              }
          case WM_DESTROY:
              PostQuitMessage(0);
              return 0;
      }
      return DefWindowProc(hwnd, uMsg, wParam, lParam);
  }
  </code></pre>
  
  <p>In brief: this program creates two textBoxes and a button that launches a process of  copying a content from the first to the second. The <code>SetWindowText</code> function causes cleaning the output box , what obviously isn't desired. </p>
  
  <p><strong>Update after the Jerry Cofinn's answer</strong></p>
  
  <pre><code>SendMessage(textBoxOutput,EM_SETSEL,-1,-1); //no difference between passing 0 or -1
  SendMessage(textBoxOutput,EM_REPLACESEL,TRUE,(LPARAM)buffer);
  </code></pre>
  
  <p>Surprisingly, it <strong>prepends</strong> the text. I've read <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb761661%28v=vs.85%29.aspx" rel="nofollow">the documentation</a> about EM_SETSEL and I'm still wondering why doesn't it place the raw input at the end.</p>