如何从工具箱创建unicode utf8编辑控件拖放,接受代码大于127的字符?
//Always return length size 1 for any unicode character
u_int length = SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0);
答案 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问题。