C++调用SetWindowText设置多行EDIT控件文本时换行符不生效问题
问题原因
- Windows 原生多行EDIT控件要求换行必须使用
\r\n(回车+换行)组合符,仅含单个\n的内容不会被识别为换行指令,会原样展示或者忽略换行效果。 - 你当前创建EDIT控件时的参数存在两个配置问题:
- 未添加
ES_AUTOVSCROLL风格,多行内容滚动展示会异常 - 控件高度仅设置为25像素,刚好仅能容纳一行文本,即使换行也看不到第二行内容
- 未添加
修复方案
- 先调整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);
- 读取文件内容后,将所有单个
\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
相关产品推荐
相关产品推荐

