VC中前缀字符&带来的UI显示问题

网友投稿 623 2022-05-30

早期整理资料的上传,解决问题中有查找和参考相关资料,内容以自己测试和处理过程整理为主。

问题现象

VC的界面上如果通过静态文本框属性显示一个包含多个&&的字符串,或者通过DrawText接口显示包含多个&&的字符串。默认情况下,一个&不会显示,两个&会显示为一个&,带来界面显示问题。

问题原因

这是因为VC的界面类控件中对文字有一些前缀相关属性,默认会将&当作前缀符号解释处理,根据控件属性中对前缀的不同处理来显示前缀附件的字符。

解决方法

配置控件属性中关闭前缀识别属性。

代码样例

void OnPaint(){ CPaintDC dc(this); // device context for painting int x = 100;   CRect rectText1(x + 50, 50, x + 200,  70); CRect rectText2(x + 50, 70, x + 200,  100); CString strTest1("1111111&&2222222"); std::wstring strTest2(L"666666&&2222222"); //dc.DrawText(strTest1, rectText1, DT_NOCLIP|DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_WORD_ELLIPSIS); //dc.DrawText(strTest2.c_str(), rectText2, DT_NOCLIP|DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_WORD_ELLIPSIS); dc.DrawText(strTest1, rectText1, DT_LEFT | DT_NOPREFIX); dc.DrawText(strTest2.c_str(), rectText2, DT_LEFT); dc.TextOutW(x + 50,  100, strTest1); dc.TextOutW(x + 50,  120, strTest2.c_str());   CDialog::OnPaint();}

静态文本框的属性调整:

DrawText处理效果:

相关资料及说明

该函数在指定的矩形里写入格式化的正文,根据指定的方法对正文格式化(扩展的制表符,字符对齐、折行等)。

通常DrawText解释助记前缀字符,&为给其后的字符加下划线,解释&&为显示单个&。指定DT_NOPREFIX,这种处理被关闭。

VC中前缀字符&带来的UI显示问题

中文说明 http://blog.csdn.net/lishuhuakai/article/details/18322459

官方文档:https://msdn.microsoft.com/en-us/library/windows/desktop/dd162499(v=vs.85).aspx

Ignores the ampersand (&) prefix character in the text. The letter that follows will not be underlined, but other mnemonic-prefix characters are still processed. Example: input string: "A&bc&&d" normal: "Abc&d" DT_HIDEPREFIX: "Abc&d" DT_NOPREFIX: "A&bc&&d" PREFIXONLY: " _ " Compare with DT_NOPREFIX and DT_PREFIXONLY.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:解析:kerberos主从双kdc如何做到可靠性保障
下一篇:快递电子面单批量打印api接口免费对接demo-JAVA示例
相关文章