上标 4 未显示在 MFC 对话框中

Superscript 4 not showing up in MFC dialog

所以我试图在 mfc 标签中打印 lbf.S²/in⁴,但它显示为 lbf.S²/in4

我想知道为什么 ² 可以正确显示而 不能。 这是一个带有Unicode字符集的32位项目。

这是 .rc 代码

STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Units"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
    CTEXT           "lbf-sec²/ in⁴",IDC_IPS1,77,36,48,8
END

您为对话框选择的字体似乎不支持上标 4 并且该字符正在映射到普通 4。 (许多字体都有上标 2,就像你的一样,但其他上标字符并没有得到如此广泛的支持。)

在您的资源脚本中,确保您的字体包含您要使用的所有字符(Arial Unicode MS 几乎包含您可能使用的所有字符,并且安装在 大多数 Windows 系统,IIRC),并确保包含 DS_SETFONT 样式:

IDD_MYBOX   DIALOGEX    0, 0, 370, 270                                                                   // 14-JAN-2020
STYLE       DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION     L"My Dialog Box Title"
FONT        10, L"Arial Unicode MS"
{
    //.. dialog controls
}

或者,您可以为给定的控件显式设置字体,但这需要更多的工作,因为您必须在 运行 时定义字体并将其加载到您的可执行文件中(我可以帮助您如果您想沿着这条路走下去,可以使用一些代码来执行此操作。)

其他有很好的上标数字选择的字体包括 "Calibri"(我最喜欢的 UI)和 "Arial,",但我不确定这些字体的许可和再分发安排是什么。

我确信这与文件编码的无意更改有关。

重新创建如下:

  1. 新的基于对话框的解决方案。
  2. 粘贴 lbf-sec²/ in⁴ 作为静态文本标题
  3. 构建并运行,一切正常。

  4. 在 Sublime Text 编辑器中打开 .rc 文件并尝试将编码更改为 Windows-1252。 (这只是为了尝试模仿 Visual Studio 以某种方式 可以 所做的无意更改。)
  5. 字符不可表示,它退回到 UTF-8 编码
  6. 保存
  7. Visual Studio 现在刷新和标题是乱码。

  8. 再次粘贴lbf-sec²/ in⁴作为标签标题
  9. 构建并 运行,您看到错误

  10. 在编辑器中查看 .rc 文件,文本确实已还原,编码也已还原

警告

我并不是说我知道编码改变的方式、原因或时间,我是说它可能会以某种方式发生。

一个解决方案(对我有用)

  1. 关闭Visual Studio
  2. 保存 .rc 文件仍然不正确 lbf-sec²/ in4,编码为 UTF-8
  3. 打开Visual Studio
  4. 将标题修改为正确的 lbf-sec²/ in⁴
  5. 在资源视图中使用上下文菜单保存.rc 文件(不知道是否需要)
  6. 关闭对话框编辑器window(不知道是否需要)
  7. 清理,全部重建,运行一切正常。


如果我知道如何清除对话框编辑器使用的任何缓存,那么我会说这将更接近 实际 解决方案。