如何创建一个接受代码大于127的字符的unicode编辑控件

时间:2011-02-12 13:06:28

标签: c winapi

如何从工具箱创建unicode utf8编辑控件拖放,接受代码大于127的字符?

//Always return length size 1 for any unicode character
u_int length = SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0);

1 个答案:

答案 0 :(得分:3)

假设您在Visual Studio中将其作为C项目编写,并且您有一个名为IDC_TEXT的子编辑对话框,而hwnd是您的对话框句柄:

// Declarations
long lRet = 0;
wchar_t *wszText = NULL;

// Retrieve the length of the edit text
lRet = SendDlgItemMessageW(hwnd, IDC_TEXT, WM_GETTEXTLENGTH, 0, 0);

// Assign memory based on retrieved length
wszText = (wchar_t *)malloc(((lRet + 1) * sizeof(wchar_t)));

// Check that memory allocation succeeded
if (wszText != NULL)
{
    // Retrive the text from edit
    lRet = SendDlgItemMessageW(hwnd, IDC_TEXT, WM_GETTEXT, (long)(lRet+1), (long)wszText);

    // Check that text is not NULL
    if (wszText == NULL)
    {
        MessageBoxW(hwnd, L"Failed to retrieve text!", L"Error", MB_OK | MB_ICONERROR);
    }
    else
    {
        MessageBoxW(hwnd, wszText, L"Edit Contents", MB_OK);
    }
}
else
{
    MessageBoxW(hwnd, L"Failed to assign memory!", L"Error", MB_OK | MB_ICONERROR);
}

请注意,代码使用SendDlgItemMessageW,并且必须使用DialogBoxW创建对话框。如果您使用的是较旧的Visual Studio,则必须选择Unicode构建,以便使用广泛的API构建程序。

不确定您为什么要在帖子中创建UTF8编辑框。 Windows使用UTF16本地表示字符,因此它只能创建一个UTF16编辑框。如果您需要在UTF8和UTF16之间进行转换,反之亦然,请查看MultiByteToWideChar和WideCharToMultiByte API。

编辑:根据David的评论更正了UTF16 / UCS2问题。