You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++调用SetWindowText设置多行EDIT控件文本时换行符不生效问题

问题原因
  • Windows 原生多行EDIT控件要求换行必须使用\r\n(回车+换行)组合符,仅含单个\n的内容不会被识别为换行指令,会原样展示或者忽略换行效果。
  • 你当前创建EDIT控件时的参数存在两个配置问题:
    1. 未添加ES_AUTOVSCROLL风格,多行内容滚动展示会异常
    2. 控件高度仅设置为25像素,刚好仅能容纳一行文本,即使换行也看不到第二行内容
修复方案
  1. 先调整EDIT控件创建参数,修改高度并补充必要风格:
hEdit = CreateWindow(TEXT("EDIT"), NULL,
    WS_VISIBLE | WS_CHILD | WS_BORDER | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL,
    10, 10, 200, 200, // 高度从25改为200,适配多行展示
    hWnd, (HMENU)NULL, NULL, NULL);
  1. 读取文件内容后,将所有单个\n替换为\r\n,适配EDIT控件的换行规则,你可以在s2ws转换之后加一段替换逻辑:
// 替换换行符逻辑
std::wstring stemp = s2ws(buffer.str());
size_t pos = 0;
while ((pos = stemp.find(L"\n", pos)) != std::wstring::npos) {
    // 避免替换已经是\r\n的情况
    if (pos == 0 || stemp[pos-1] != L'\r') {
        stemp.insert(pos, L"\r");
        pos += 2; // 跳过插入的\r和原有的\n
    } else {
        pos += 1;
    }
}
recordin = stemp.c_str();
SetWindowText(hEdit, recordin);

如果还有异常可以检查文件读取逻辑是否正常,确认读取到的字符串里确实包含\n而非转义后的\\n即可。

内容的提问来源于stack exchange,提问作者LoneWarrior ForgottenTrails

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:06:04