我回复CRichEditCtrl的串口输入,一次到达一个char。我遇到的问题是,当我收到' \ r'其次是' \ n'我最后两页上下两行,而不是一行。调试一下我意识到发送" \ r \ n"导致(我认为是)正确的单个新行插入,但发送' \ r'和' \ n'分别产生两条新线。
简单示例,其中m_Output显然是一个丰富的编辑控件变量:
m_Output.SetSel(-1, -1);
m_Output.ReplaceSel(_T("X\r\n"));
m_Output.SetSel(-1, -1);
m_Output.ReplaceSel(_T("Y"));
m_Output.SetSel(-1, -1);
m_Output.ReplaceSel(_T("\r"));
m_Output.SetSel(-1, -1);
m_Output.ReplaceSel(_T("\n"));
m_Output.SetSel(-1, -1);
m_Output.ReplaceSel(_T("Z"));
以上的输出是:
X
Y
Z
为什么要额外的行?!?!
我可能想到了Set / ReplaceSel()的行为,但它并没有以这种方式在常规字符之间插入行,例如如果我发送' a'接着是' b'输出只是" ab" ...
答案 0 :(得分:3)
RichEdit控件的各种版本为documented,因为段落符号使用不同的字符; RichEdit 1.0使用\r\n
,RichEdit 2.0记录为使用\r
而RichEdit 3.0(可能更高)可以使用它们。
这看起来虽然控件实际上也看到了一个单独的\n
作为中断(即听起来它接受\r
,\n
和{{1}所有代表单个休息时间)。这与文档不符,但话说再次,这不是Microsoft文档第一次有些不准确。
在内部,控件可能不会逐字存储实际的中断字符,因此当您将\r\n
和\r
分别输入时,它无法将它们连接成一个单独的中断
听起来最简单的解决方案是过滤掉\n
个字符,而不是将它们发送给控件。这样,所有控件都会看到\n
个字符,并且您最终只会在文本中出现一个中断。