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 处的字符是 ª