gpt4 book ai didi

c++ - CEdit不显示特殊字符

转载 作者:可可西里 更新时间:2023-11-01 14:44:54 30 4
gpt4 key购买 nike

为什么 CEdit 控件不显示特殊字符,例如 ™(商标)?例如,创建一个带有 CEdit 控件的 CDialog,并将 Dialog 标题和 CEdit 控件设置为相同的 CString 并得到不同的结果。

CString  s(_T("ShowTM ™"));
SetWindowText(s); //Set Dialog Title (shows ™)
editCtrl.SetWindowText(s); //Set Edit Control (does not show ™)

What the Dialog looks like

最佳答案

感谢克里斯蒂安和保罗。在您的帮助下,我能够拼凑出正在发生的事情。结论可能有缺陷,但 Visual Studio 使用默认字体属性创建对话框

FONT 8, "MS Sans Serif"

MS Sans Serif 仅在 Windows Me/95/98 中真正使用,缺少我需要的字符。

今天的默认字体是

FONT 8, "MS Shell Dlg"

MS Shell Dlg 并不是真正的字体,而是 Windows 稍后映射到真实字体的占位符,具体取决于 Windows 的版本。 Windows XP/Vista/7 等映射到 Microsoft(不是 MS)Sans Serif,它具有我需要的字符。

我相信 Windows 正在将 MS Sans Serif 动态映射到 Microsoft Sans Serif for CDialog,而不是 CEdit,并且

editCtrl.SetWindowTextW( _T("Hello ™"));

之所以有效,是因为新对话框使用 MS Shell Dlg 字体,因此获得了 Microsoft Sans Serif 的完整字符集。

鉴于这是遗留代码,我有不到 200 个明确的 MS San Serif 引用,应该更新到 MS Shell Dlg。耶!

有关字体映射的更多详细信息,请参阅 https://msdn.microsoft.com/en-us/library/windows/desktop/dd374112%28v=vs.85%29.aspx .

关于c++ - CEdit不显示特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30202074/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com