【问题标题】:Edit Control with UNICODE support in MBCS type project在 MBCS 类型项目中使用 UNICODE 支持编辑控件
【发布时间】:2013-10-16 20:12:16
【问题描述】:

我有支持 MBCS(多字节字符集)的旧 MFC 应用程序。我有一个与此控件相关的编辑控件和 CString。现在我希望只有此控件应支持 UNICODE(UTF-16) 字符集。

编辑:

在头文件中:

CString m_SerialNO;

在 cpp 文件中:

DDX_Text(pDX, IDC_EDIT_SERIAL_NO, m_SerialNO);

我无法将项目的字符集属性从Use Multi-Byte Character Set 更改为Use Unicode Character Set

【问题讨论】:

  • 您想保留项目 MSCB(Microsoft 已弃用)但仍然有一个编辑控件显示 UNICODE?
  • 是的,我想要这样...
  • 我试过一次同样的事情,但失败了。只需花时间将其整体转换为 Unicode。没那么复杂。
  • @Dialectus 是的,我知道这并不复杂,但是有一些限制,所以我无法更改项目的字符集...
  • 还有一个问题:您必须使用一种能够显示所需 UNICODE 字符字形的字体。并非所有字体都这样做。

标签: visual-c++ unicode mfc


【解决方案1】:

其实很简单:

// macro to get buffer size in declare character type
#define _countof(array) (sizeof(array)/sizeof(array[0]))

// text buffer must be in unicode
WCHAR szBufferW[1024];

// retrieve unicode text in MCBS build dialog
::GetDlgItemTextW(this->m_hWnd, IDC_EDIT1, szBufferW, _countof(szBufferW));

// display unicode text in in MCBS build dialog
::SetDlgItemTextW(this->m_hWnd, IDC_EDIT2, szBufferW);

【讨论】:

    【解决方案2】:

    只要使用 CreateWindowA 创建 Edit 控件,所有消息都将通过当前代码页进行过滤和转换...即使您使用 SetWindowTextW 或 WM_SETTEXTW 也会发生转换。

    【讨论】:

    • 那么可以使用CreateWindowW()动态创建编辑控件并使用API​​ *W函数来设置和获取文本?
    • 没错。但是,只要您绑定到 MBCS MFC,您就无法解决这个问题。还必须使用 CreateDialogW。将整个程序转换为 UNICODE!那是最好的办法。您可以选择一些不可翻译的模块并且仍然使用 MBCS...只要这些模块不使用 MFC ;)
    猜你喜欢
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多