Добавить новую строку в текстовое поле (Win32) - PullRequest
2 голосов
/ 24 апреля 2010

Я делаю клон Блокнота. Прямо сейчас мой текст загружается нормально, но там, где они являются символами новой строки, они не создают новые строки в текстовом поле.

Я загружаю это так:

void LoadText(HWND ctrl,HWND parent)
{

    int leng;
    char buf[330000];

    char FileBuffer[500];
    memset(FileBuffer,0,500);

    FileBuffer[0] = '*';
    FileBuffer[1] = '.';
    FileBuffer[2] = 't';
    FileBuffer[3] = 'x';
    FileBuffer[4] = 't';

    OPENFILENAMEA ofn;
    memset(&ofn, 0, sizeof(OPENFILENAMEA));
    ofn.lStructSize = sizeof(OPENFILENAMEA);
    ofn.hwndOwner = parent;
    ofn.lpstrFile = FileBuffer;
    ofn.nMaxFile = 500;
    ofn.lpstrFilter = "Filetype (*.txt)\0\0";
    ofn.lpstrDefExt = "txt";
    ofn.Flags = OFN_EXPLORER;

    if(!GetOpenFileNameA(&ofn))
    {
        return;
    }
    ifstream *file;
    file = new ifstream(FileBuffer,ios::in);

    int lenn;
    lenn = 0;

    while (!file->eof())
    {

        buf[lenn] = file->get();
        lenn += 1;

    }
    buf[lenn - 1] = 0;

    file->read(buf,lenn);
    SetWindowTextA(ctrl,buf);
    file->close();
}

Как мне сделать так, чтобы символы новой строки?

Спасибо

(Исправлено, оказалось, что поток не давал мне CR, поэтому мне пришлось вставить их.

1 Ответ

5 голосов
/ 24 апреля 2010

Убедитесь, что у вас установлено ES_MULTILINE|ES_WANTRETURN.

Элементы управления многострочным редактированием используют "символы разрыва строки", чтобы принудительно перенести его.Чтобы указать «мягкий разрыв строки», используйте CRCRLF ( source ).Итак, я думаю, вам нужно заменить все ваши CRLF (или любой другой символ eol, используемый вашим файлом) на CRCRLF.Вы уже читаете свой файл символ за символом, поэтому вы можете просто вставить дополнительный CR в буфер.

В качестве примечания, вы в конечном итоге захотите выполнить IO файла в отдельном потокет.е. не поток пользовательского интерфейса), чтобы вы не повесили пользовательский интерфейс во время чтения файла.Было бы хорошо, если бы пользовательский интерфейс отображал какую-то анимацию загрузки или индикатор выполнения.

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