Windows.h - SetWindowText显示CR-LF字符

时间:2015-04-06 13:26:51

标签: c++

我正在用visual c ++编写一个基本程序,允许用户输入文本,然后程序翻转文本并显示给用户进行复制。该程序运行良好,直到您在编辑框中添加一个输入。当用户单击以翻转文本而不是向下一行时,它会显示\ r \ n的实际字符。

有没有办法按原样显示文本而不是实际的字符串本身?

以下是我设置文字的方法:

wchar_t lpwString[4096];
int length = GetWindowTextW(text->hwnd, lpwString, 4096);
SetWindowText(text->hwnd, flipText(lpwString, length));

这是方法flipText

LPWSTR flipText(wchar_t textEntered[], const int len) {
    wchar_t text[4096];
    wchar_t flipped[4096];
    wcsncpy_s(text, textEntered, len +1);
    wcsncpy_s(flipped, textEntered, len +1);

    for (int i = len -1, k = 0; i > -1; i--, k++)
        flipped[k] = text[i];

    return flipped;
}

“text”只是我为编辑EDIT框而创建的对象。

3 个答案:

答案 0 :(得分:1)

对于编辑框,返回是CR + LF序列,当您反转要在LF + CR中转换它的文本时,该文本无法识别(它显示单个字符)。一个简单的方法可能是对反向字符串进行第二次传递,并将所有LF + CR对交换为CR + LF。

顺便提一下,你的flipText函数被严重破坏了 - 你正在执行原始字符串的无用额外副本,并且你正在返回一个指向本地数组的指针,这只是偶然的。一种更简单的方法可能就是将字符串就地反转。

此外,如果您使用的是C ++,则应考虑使用std::string(如果使用宽字符,则使用std::wstring),这会删​​除整个类的缓冲区生命/大小问题。

答案 1 :(得分:0)

  1. 确保 ES_WANTRETURN 样式用于编辑框。
  2. 此外,您应该在 flipText()电话后立即将\n\r更改回\r\n

答案 2 :(得分:0)

编辑控制需要' \ r \ n'组合打破。当你翻转所有文字时,你会得到\n\r,这对于窗户而言只有文字。

建议 - 翻转文字并将所有\n\r替换回\r\n