windowsapi richtextbox在c++中添加了额外的换行符

windows api richtextbox adding extra linebreak in c++

本文关键字:换行符 添加 richtextbox c++ windowsapi      更新时间:2023-10-16

我正在c++windows api 中制作一个十六进制编辑器

我有一个丰富的文本框,我可以很好地阅读文件。问题是,当我写回文件时,richtextbox会添加某种换行符或其他字符,这样文件就不会输出相同的内容。我使用消息框来查看特殊字符是什么,它似乎是某种换行符,因为它会在消息框中显示我的十六进制字节,然后在插入特殊字符的部分,它会在稍高的消息框中展示我的十六十六进制字节。大约6个月前,我在一个汇编程序中遇到了这个问题,并通过删除所有十六进制字节"13"来解决它,因为它们在汇编中没有"\n"。所以我试着删除"\n",但没有成功,我还试着删除了"\t"、"\f"、"\r"、"\n\r"、"\r\n",但这些都没有删除。这是我用来尝试删除特殊字符的代码(我在堆栈溢出时发现了它,看起来它很有效,所以我不认为这是代码的错误)

str.erase(std::remove(str.begin(), str.end(), 'n'), str.end());

我甚至试着写一个函数,如果你找到任何"\n"、"\t"、"\f"、"\r"、"\n\r"、"\r\n"消息框,它会给我发消息,但它从来没有给我发过消息,所以它是其他特殊的字符。

所以有人能帮我弄清楚这个特殊字符是什么吗?这样我就可以把它去掉了

感谢

这里的更新是如何从windows中的richtextbox中删除换行符

您必须删除'\r\n'和'\n',所以下面是将richtextbox的内容读取为字符串并删除换行符的代码

textboxlength = GetWindowTextLength(hwndtextbox1);
GetWindowText(hwndtextbox1, buffert, textboxlength);
buffer4 = buffert;
                                          buffer4.erase(std::remove(buffer4.begin(), buffer4.end(), L'rn'), buffer4.end());
                                          buffer4.erase(std::remove(buffer4.begin(), buffer4.end(), L'n'), buffer4.end());

textboxlength是LONGLONG,buffert是TCHAR,buffer4是wstring

Windows使用CR+LF作为标准换行标记,也就是说,两个单独的字符在一起-ASCII 13后面跟着ASCII 10。一个或另一个本身通常不会被认为是断线。

编辑:下面是一个从std::string:中删除CR+LF的示例函数

std::string RemoveLinebreak(std::string input)
{
    const std::string newline("rn");
    size_t pos = 0;
    while((pos = input.find(newline, pos)) != std::string::npos) {
         input.erase(pos, newline.length());
    }
    return input;
}

对于wchar'\n'是L'\n'并且'\n'为L'\n'

所以基本上你应该使用

std::wstring str

str.erase(std::remove(str.begin(), str.end(), 'Ln'), str.end());

std::wstring str;

int pos;

pos=str.find_first_of(Text("nr"));if(pos!=std::wstring::nops)str.erase(pos,pos+1);