Элемент управления WinAPI не отображает новые строки - PullRequest
6 голосов
/ 26 июня 2011

Ну, это только половина правды. Новые строки работают нормально по большей части, но когда я загружаю в них файл, ни одна из новых строк не отображается. Копирование текста и вставка его в Notepad ++ с отображением всех включенных символов показывает, что возврат каретки и перевод строки есть.

Мой код загрузки:

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());}

1 Ответ

12 голосов
/ 26 июня 2011

Поскольку вы открываете файл в текстовом режиме, ваш текст представляет собой новую строку \n. Возможно, для управления редактированием текста требуется \r\n.

Одна из возможностей сделать это (без манжеты)

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() ).
}

Но лучше установить текст сразу, например:

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.

Приветствия & hth.,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...