我们有一个 MFC Windows 应用程序,最初是用 VC++ 6 编写的,多年来针对更新的 IDE 进行了更新,目前在 VS2017 中开发。
该应用程序是用 MBCS(不是 unicode)构建的。尝试切换到 Unicode 会导致 3806 编译错误,这可能只是冰山一角。
但是,我们希望能够使用不同的代码页运行应用程序,即。1250(中欧)。
我尝试构建一个小型测试应用程序,并设法让它与特殊字符 (čćšđž) 一起工作。我通过使用代码页 1250 将对话框字体设置为 Microsoft Sans Serif 来做到这一点。我们的应用程序中的相同方法不起作用。注意:我们应用程序中的对话框是动态创建的,字体是使用 SetFont 设置的。
在这两个应用程序中处理特殊字符的方式有所不同。
- 在测试应用程序中,特殊字符显示在编辑控件中,GetWindowsText 检索正确的字节。但是,尝试从其他语言编写一些字符时,会将它们呈现为“????”。
- 在我们的应用程序中,所有特殊字符都被正确渲染,但 GetWindowText(或 WM_GETTEXT)将特殊字符转换为类似的 ascii 对应物(čćđ -> ccd)。
我相信我们应用程序中的 Edit 控件显示 Unicode 文本,但 GetWindowText 将其转换为 ascii。
有谁知道这里发生了什么,以及我该如何解决?
注意:我知道如何将项目转换为 Unicode。我们目前选择不为此投入资源,因为它可能需要数周或数月才能实施。问题是我如何让它与 MBSC 一起工作,以及为什么编辑控件将 Č 转换为 C。