【问题标题】:Can't Get Visual C++ 6.0 Dialog Edit Control to Accept Unicode / Can't Get EDITTEXT Resource to Accept Unicode无法获取 Visual C++ 6.0 对话框编辑控件以接受 Unicode/无法获取 EDITTEXT 资源以接受 Unicode
【发布时间】:2012-06-17 10:09:51
【问题描述】:

我在 Windows 7 中使用 Visual C++ 6.0。我转到 File->New。我选择 Win32 应用程序并将其命名为 HelloWorld。 “Win32 应用程序第 1 步,共 1 步”出现。我选择“典型的 Hello World 应用程序”。 VC 创建了一个简单的 Hello World 应用程序。

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

#define UNICODE
#define _UNICODE

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

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

然后我将它粘贴到 EDITTEXT 控件中。它显示为“?”问号。

我不明白该怎么做。如何让对话框编辑框接受 Unicode?​​p>

提前致谢, 瑞恩

【问题讨论】:

  • 你真的必须使用 Visual C++ 6.0 吗?它是最糟糕的编译器。即使它在技术上不是最糟糕的,但它是最糟糕的,因为即使在今天它也如此传播。它支持预标准 C++,鼓励不良做法,鼓励使用过时的 API,具有不良和过时的优化。今天存在许多开源或免费的 C++ 平台,它们的数量级要好得多。还要考虑它是十四年前发布的,这意味着一万四千狗年!

标签: c++ windows visual-c++ unicode


【解决方案1】:

不要在源文件中定义 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;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 2021-01-07
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    相关资源
    最近更新 更多