5

我有一个大型 MFC 应用程序,我正在扩展它以允许多语言输入。目前我需要允许用户在单个对话框的编辑框中输入 Unicode 数据。

有没有办法在不为整个应用程序打开 UNICODE 或 MBCS 的情况下做到这一点?我现在只需要转换应用程序的一小部分。是否可以分段执行此操作,如果可以,如何执行?


澄清:我可以使用 ::GetWindowTextW() 从窗口中获取 Unicode 信息。我试图弄清楚如何允许用户在窗口中输入 Unicode 文本。目前,用户在 windows-1252 代码页之外键入的字符显示为“?”。有没有办法来解决这个问题?

4

4 回答 4

4

要允许CEdit显示 Unicode 字符,您应该使用CreateWindowW函数创建它。我刚刚在 ANSI MFC 程序中对其进行了测试。

// allows Unicode characters
CreateWindowW( L"EDIT", L"", WS_CHILD|WS_VISIBLE, 10, 10, 50, 20, GetSafeHwnd(), 0, 0, 0 );

// shows Unicode characters as ?
CreateWindow( "EDIT", "", WS_CHILD|WS_VISIBLE, 10, 10, 50, 20, GetSafeHwnd(), 0, 0, 0 );

您可以在对话框的功能中手动创建所有编辑OnInitDialog框。然后将它们子类化为具有 Unicode 支持的自定义 CMyEdit 类。

于 2009-08-24T15:52:14.703 回答
2

你能用丰富的编辑控件替换这些编辑框吗?然后,即使在非 Unicode 版本中,您也可以输入国际字符;在内部,它们将被 rtf 编码,但是当您从控件中流式传输文本时,您可以使用 SF_UNICODE 格式来获取 Unicode 表示。

于 2009-08-24T15:58:50.997 回答
1

您可能会对这个 PowerPoint 幻灯片感兴趣——它有点旧(2000 年),但它谈到了将程序转换为混合的ANSI/Unicode。

案例研究:将 MFC 应用程序移植到 Unicode

于 2009-08-24T15:13:14.410 回答
0

只是一个想法 - 您可以尝试为您的构建打开 UNICODE 并在需要的地方使用 ANSI 调用(例如 CStringA)。

我知道这可能不是您的选择,但认为值得指出的是您可以反过来解决这个问题

于 2009-08-24T15:02:49.323 回答