上标 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,",但我不确定这些字体的许可和再分发安排是什么。
我确信这与文件编码的无意更改有关。
重新创建如下:
- 新的基于对话框的解决方案。
- 粘贴
lbf-sec²/ in⁴
作为静态文本标题
构建并运行,一切正常。
- 在 Sublime Text 编辑器中打开 .rc 文件并尝试将编码更改为 Windows-1252。 (这只是为了尝试模仿 Visual Studio 以某种方式 可以 所做的无意更改。)
- 字符不可表示,它退回到 UTF-8 编码
- 保存
Visual Studio 现在刷新和标题是乱码。
- 再次粘贴
lbf-sec²/ in⁴
作为标签标题
构建并 运行,您看到错误
在编辑器中查看 .rc 文件,文本确实已还原,编码也已还原
警告
我并不是说我知道编码改变的方式、原因或时间,我是说它可能会以某种方式发生。
一个解决方案(对我有用)
- 关闭Visual Studio
- 保存 .rc 文件仍然不正确
lbf-sec²/ in4
,编码为 UTF-8
- 打开Visual Studio
- 将标题修改为正确的
lbf-sec²/ in⁴
- 在资源视图中使用上下文菜单保存.rc 文件(不知道是否需要)
- 关闭对话框编辑器window(不知道是否需要)
清理,全部重建,运行一切正常。
如果我知道如何清除对话框编辑器使用的任何缓存,那么我会说这将更接近 实际 解决方案。
所以我试图在 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,",但我不确定这些字体的许可和再分发安排是什么。
我确信这与文件编码的无意更改有关。
重新创建如下:
- 新的基于对话框的解决方案。
- 粘贴
lbf-sec²/ in⁴
作为静态文本标题 构建并运行,一切正常。
- 在 Sublime Text 编辑器中打开 .rc 文件并尝试将编码更改为 Windows-1252。 (这只是为了尝试模仿 Visual Studio 以某种方式 可以 所做的无意更改。)
- 字符不可表示,它退回到 UTF-8 编码
- 保存
Visual Studio 现在刷新和标题是乱码。
- 再次粘贴
lbf-sec²/ in⁴
作为标签标题 构建并 运行,您看到错误
在编辑器中查看 .rc 文件,文本确实已还原,编码也已还原
警告
我并不是说我知道编码改变的方式、原因或时间,我是说它可能会以某种方式发生。
一个解决方案(对我有用)
- 关闭Visual Studio
- 保存 .rc 文件仍然不正确
lbf-sec²/ in4
,编码为 UTF-8 - 打开Visual Studio
- 将标题修改为正确的
lbf-sec²/ in⁴
- 在资源视图中使用上下文菜单保存.rc 文件(不知道是否需要)
- 关闭对话框编辑器window(不知道是否需要)
清理,全部重建,运行一切正常。
如果我知道如何清除对话框编辑器使用的任何缓存,那么我会说这将更接近 实际 解决方案。