WinAPI Control Does Not Display Newline Characters

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 displayed. Copying text and pasting it into Notepad ++ with the display of all included characters shows that there is a carriage return and a line.

My download 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());} 
+6
source share
1 answer

Since you open the file in text mode, your text represents a new line \n . Perhaps controlling the text editing requires \r\n .

One option is to do so (from 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 immediately, for example:

 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 and hth.,

+11
source

Source: https://habr.com/ru/post/891379/


All Articles