无法获取 Visual C++ 6.0 对话框编辑控件以接受 Unicode /无法获取 EDITTEXT 资源以接受 Unicode

Can't Get Visual C++ 6.0 Dialog Edit Control to Accept Unicode / Can't Get EDITTEXT Resource to Accept Unicode

本文关键字:Unicode 获取 EDITTEXT 资源 编辑 C++ Visual 对话框 控件      更新时间:2023-10-16

我在Windows 7中使用Visual C++ 6.0。我转到文件>新。我选择Win32应用程序并将其命名为HelloWorld。出现"Win32 应用步骤 1(共 1 步)"。我选择"典型的Hello World应用程序"。VC创建了一个简单的Hello World App。

我选择文件HelloWorld.cpp。我在 HelloWorld.cpp 文件的顶部粘贴以下定义:

#define UNICODE
#define _UNICODE

然后我双击HelloWorld.rc。我打开"对话框"项。在它下面是IDD_ABOUTBOX。我双击它。然后,我将一个 EDITTEXT 控件添加到对话框窗口。我按 ctrl-F5 运行该程序。

我选择"关于","关于"对话框与 EDITTEXT 控件一起显示。然后,我转到 charmap.exe 应用程序并从 Meiryo 字体中选择一个日语平假名字符。我将其复制到剪贴板。

然后,我将其粘贴到 EDITTEXT 控件中。它显示为"?"问号。

我不知道该怎么办。如何让对话框编辑框接受 Unicode?

提前感谢,莱恩

不要在源文件中定义 UNICODE 和 _UNICODE。 您必须在项目级别定义它。VS 中的表单菜单选择项目和设置 (Alt-7)。

在对话框中,选择"C++选项卡",然后从"类别"下拉框中选择"预处理器"。在下面的编辑框中,输入 UNICODE 并用逗号分隔_UNICODE。

现在,编辑控件(按原样)使用没有扩展字符集的系统字体。您必须更改编辑控件的字体。

在对话框中WM_INITDIALOG处理程序执行以下操作:

case WM_INITDIALOG:
    {
        LOGFONT lf;
        ::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT), sizeof(lf), &lf);
        HWND hEdit = GetDlgItem(hDlg, IDC_EDIT1);
        HDC hDC = GetDC(hEdit);
        _tcscpy(lf.lfFaceName, _T("Arial"));
        lf.lfHeight = -MulDiv(10, GetDeviceCaps(hDC, LOGPIXELSY), 72);
        //This creates the new font for the edit control
        HFONT hFont = CreateFontIndirect(&lf);
        //This sets the new font for the edit control
        SendMessage(hEdit, WM_SETFONT, (WPARAM)hFont, FALSE);
    }
    return TRUE;

请记住,并非所有字体类型都有扩展字符集。我认为在代码片段中将其设置为Arial应该有效。