我正在制作记事本克隆。现在我的文本加载正常,但是它们是换行符,它们不会在文本字段中创建换行符。
我像这样加载它:
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,所以我不得不插入它们。
答案 0 :(得分:5)
确保您设置了ES_MULTILINE|ES_WANTRETURN
。
多行编辑控件使用“软换行符”强制它换行。要指示“软线中断”,请使用CRCRLF(source)。所以我猜你需要用CRCRLF替换你所有的CRLF(或你文件使用的任何eol字符)。您已经逐个字符地读取文件,因此您只需在缓冲区中插入一个额外的CR。
作为旁注,您最终希望在单独的线程(即不是UI线程)上执行文件IO,这样您就不会在读取文件时挂起UI。如果UI显示某种加载动画或进度条,那就太好了。