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

时间:2010-04-23 20:41:38

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

如何让它成为新的换行符?

由于

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

1 个答案:

答案 0 :(得分:5)

确保您设置了ES_MULTILINE|ES_WANTRETURN

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

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