MFC 控件中的 Unicode 支持
Unicode Support in MFC Controls
我正在探索将现有的 MFC 应用程序从 MBCS 转换为 Unicode,我正在 Unicode 模式下编译一个简单的入门应用程序以检查编辑控件,例如,在 Unicode/W 或MBCS/A模式。
但我得到了一些奇怪的结果。
例如,如果我在 Word 中输入 Alt+1702,我会得到预期来自统一码 table。
但是如果我在 Unicode MFC 应用程序的编辑控件中输入 Alt+1702,我会得到一个上标 "a" (ª) 代替。这与我从现有 MBCS 应用程序获得的行为相同。
如果我使用文件打开并在文件名字段中输入 Alt+1702,Word (2007) 中也会出现第二种行为.但如果我在功能区的字体组合中输入它,它就会正常显示。
我在这里错过了什么?
Windows 默认禁用十六进制小键盘。您必须启用它并使用 Alt++Hex value
输入值
如何启用:
关于Alt+1702产生ª
的原因
Alt codes are generally limited to ANSI or OEM code pages only and won't work for code points larger than 255. A few apps (like MS Word as you experienced) do support larger values, which means Alt+1702 will produce U+06A6(阿拉伯字母 peheh = ڦ)符合预期 (1702 = 0x06A6)。其他一些应用程序只是在第三个数字之后丢弃任何数字。但是默认情况下,在几乎所有应用程序中,如果您输入任何更大的值,那么 只会将实际值的低字节 作为代码点,即 modulo 256
所以按Alt+1702将等同于Alt+166 因为 1702 ≡ 166 (mod 256)。当您 运行 US Windows 使用 code page 437 作为 OEM 代码页时,那么 代码点 166 处的字符是 ª
我正在探索将现有的 MFC 应用程序从 MBCS 转换为 Unicode,我正在 Unicode 模式下编译一个简单的入门应用程序以检查编辑控件,例如,在 Unicode/W 或MBCS/A模式。
但我得到了一些奇怪的结果。
例如,如果我在 Word 中输入 Alt+1702,我会得到预期来自统一码 table。
但是如果我在 Unicode MFC 应用程序的编辑控件中输入 Alt+1702,我会得到一个上标 "a" (ª) 代替。这与我从现有 MBCS 应用程序获得的行为相同。
如果我使用文件打开并在文件名字段中输入 Alt+1702,Word (2007) 中也会出现第二种行为.但如果我在功能区的字体组合中输入它,它就会正常显示。
我在这里错过了什么?
Windows 默认禁用十六进制小键盘。您必须启用它并使用 Alt++Hex value
输入值如何启用:
关于Alt+1702产生ª
的原因Alt codes are generally limited to ANSI or OEM code pages only and won't work for code points larger than 255. A few apps (like MS Word as you experienced) do support larger values, which means Alt+1702 will produce U+06A6(阿拉伯字母 peheh = ڦ)符合预期 (1702 = 0x06A6)。其他一些应用程序只是在第三个数字之后丢弃任何数字。但是默认情况下,在几乎所有应用程序中,如果您输入任何更大的值,那么 只会将实际值的低字节 作为代码点,即 modulo 256
所以按Alt+1702将等同于Alt+166 因为 1702 ≡ 166 (mod 256)。当您 运行 US Windows 使用 code page 437 作为 OEM 代码页时,那么 代码点 166 处的字符是 ª