【问题标题】:wxDC::wxTextEntryDialog escapes newlineswxDC::wxTextEntryDialog 转义换行符
【发布时间】:2014-09-23 20:08:39
【问题描述】:

wxTextEntryDialog 将 '\n' 转换为 '\\n'

这段代码

 dc.DrawText( "line a\nline b", 10, 100 );

输出我期望的结果

line a
line b

所以我编写了这个代码:

wxTextEntryDialog dlg(this,"","Name the flower");
dlg.ShowModal();
setName( dlg.GetValue().wc_str() );
dc->DrawText( getName(), 10, 10 );

然后输入

line a\nline b

显示屏显示

a行\nb行

在 Windows 上使用 wxWidgets v3.0.1

【问题讨论】:

    标签: wxwidgets


    【解决方案1】:

    drawing sample 表明DrawText() 确实适用于多行,因此您的代码一定有问题。我不能说虽然你没有向我们展示太多,但你展示的 sn-p 甚至不会编译,因为参数顺序是错误的,所以很明显你必须在你的真实程序中做一些不同的事情。

    【讨论】:

    • 在为你准备真实代码的时候发现了问题。 wxTextEntryDialog 在我输入文本时添加了转义,将 la\nlb 更改为 la\\nlb
    • 嗯? wxTextEntryDialog 不会做这样的事情。 OTOH,您真的不希望在文本控件中输入两个字符(反斜杠和“n”)来生成新行,对吗?
    【解决方案2】:

    解决方法是添加

    wxString name = getName();
    name.Replace("\\n","\n");
    dc->DrawText( name, 10, 10 );
    

    演示应用的完整源代码https://www.dropbox.com/s/l6wu7pxtwvcj9vp/so26003871.zip?dl=0

    【讨论】:

    • 解决方法当然是必要的。查看截图和发布的源代码。
    • 这里有一个巨大的误解。这不是一种解决方法,因为没有什么可以解决的。在对话框中输入反斜杠和“n”并不会神奇地创建一个新行。
    • @VZ 请尝试以下代码:" dc2.DrawText("line a\nline b", 10, 100 );"并注意新行是如何神奇地出现的。
    • 是的,这究竟是为什么?你真的需要重温你最喜欢的 C 或 C++ 书籍中关于转义序列的章节。
    • 这并不奇怪,这正是我所期望的。正如我在我的问题中所写。令我惊讶的是 wxTextEntryDialog 添加了第二个转义,将 '\n' 更改为 '\\n' 导致我的问题中描述的问题。请问您是否阅读了我的问题,我在此问题的描述比在评论中更连贯。
    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2011-02-15
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多