【问题标题】:Piecewise conversion of an MFC app to Unicode/MBCSMFC 应用程序到 Unicode/MBCS 的分段转换
【发布时间】:2010-11-22 07:24:53
【问题描述】:

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

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


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

【问题讨论】:

  • 为什么不能直接使用完整的 Unicode?​​span>

标签: c++ unicode mfc mbcs


【解决方案1】:

要允许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 类。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      Case Study: Porting an MFC Application to Unicode

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 在这种情况下我不能这样做。会有数以万计的电话追捕和转换。
        猜你喜欢
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-08
        • 1970-01-01
        相关资源
        最近更新 更多