As promised, I'm posting back my results. Turned out the user didn't desire a text print out but settled on the text file output version and wished more interface options where the output box resided. So the project went another direction.
However, not one to settle on defeat and it still bugged me I could not get this working right, it was on my mind over the Holidays. I knew that I could make a huge array of arrays and keep adding the strings to it for display as most 101 versions of instruction show but not something feasible. I had tried DrawText and send keyboard input of VK_ENTER on each line but when you went to get text and redisplay, the enters didn't show up and it was a run on line.
So I decided to revisit EM_REPLACESEL another method I had used and found the answer....
case WM_CREATE :
hwndEdit = CreateWindowEx ( WS_EX_STATICEDGE, __T("edit"), NULL,
WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_NOHIDESEL |
ES_AUTOVSCROLL | ES_LEFT | ES_MULTILINE | ES_READONLY,
0, 0, 0, 0, hwnd, (HMENU) ID_EDIT, hInst, NULL ) ;
case WM_CTLCOLORSTATIC :
if ( lParam == (LPARAM) hwndEdit )
SetBkColor ( (HDC) wParam, RGB ( 255, 255, 255 ) ) ;
return (LRESULT) GetStockObject ( WHITE_BRUSH ) ;
case WM_APP :
SendMessageA ( hwndEdit, EM_REPLACESEL, 0, szBuffer ) ;
SendMessage ( hwndEdit, EM_REPLACESEL, 0, __T ( "\r\n" ) ) ;
SendMessage ( hwndEdit, EM_SETSEL, -1, 0 ) ;
EM_SETSEL with -1 in wParam was just like dooing the DrawText and SendInput using VK_ENTER to stay ahead of the text but the EM_REPLACESEL made the difference and there was no longer a need to read in the text and redraw it or handle the the scroll as it now works fine.