WinAPI edit control doesn't display newlines

ConsciousCode picture ConsciousCode · Jun 26, 2011 · Viewed 7.9k times · Source

Well, that's only half true. Newlines work fine for the most part, but when I load a file into it, none of the newlines are shown. Copying the text and pasting it into Notepad++ with view all characters turned on shows that the carriage return and line feed are there.

My loading code:

void open_file(HWND hwnd,const char* fname){
    SendMessage(textbox,WM_SETTEXT,(WPARAM)0,(LPARAM)"");
    FILE* file=fopen(fname,"r");
    fullpath=fname;
    filename=fullpath.substr(fullpath.rfind('\\')+1,fullpath.length());
    int pos;
    while(!feof(file)){
        pos=GetWindowTextLength(textbox);
        SendMessage(textbox,EM_SETSEL,pos,pos);
        fread(buffer,2048,sizeof(char),file);
        SendMessage(textbox,EM_REPLACESEL,false,(LPARAM)buffer);}
    fclose(file);
    SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)filename.c_str());}

Answer

Cheers and hth. - Alf picture Cheers and hth. - Alf · Jun 26, 2011

Since you're opening the file in text mode your text represents newline by \n. Possibly the text edit control requires \r\n.

One possibility is to do like this (off the cuff)

std::string line;
std::ifstream file( fname );
while( std::getline( file, line ) )
{
    line += "\r\n";
    // Append  the line to the edit control here (use c_str() ).
}

But better, set the text all at once, like:

std::string line;
std::string text;
std::ifstream file( fname );
while( std::getline( file, line ) )
{
    line += "\r\n";
    text += line;
}
SetWindowText( textbox, text.c_str() ... whatever );  // Not sure of args, check docs.

Cheers & hth.,