在文本字段中添加换行符(Win32)

jma*_*erx 2 c++ winapi

我正在制作记事本克隆.现在我的文本加载正常但是它们是换行符,它们不会在文本字段中创建换行符.

我像这样加载它:

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();
}
Run Code Online (Sandbox Code Playgroud)

如何让它成为新行字符?

谢谢

(修正了它,结果是流没有给我CR,所以我不得不插入它们.

i_a*_*orf 5

确保您已ES_MULTILINE|ES_WANTRETURN设置.

多行编辑控件使用"软换行符"强制它换行.要指示"软线中断",请使用CRCRLF().所以我猜你需要用CRCRLF替换你所有的CRLF(或你文件使用的任何eol字符).您已经逐个字符地读取文件,因此您可以在缓冲区中插入额外的CR.

作为旁注,您最终希望在单独的线程(即不是UI线程)上执行文件IO,这样您在读取文件时就不会挂起UI.如果UI显示某种加载动画或进度条,那就太好了.