Предполагается, что вы пишете это в 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 build, чтобы программа создавалась с использованием широких API.
Не уверен, почему вы говорите, что хотите создать поле редактирования UTF8 в своем сообщении. Windows использует UTF16 для естественного представления символов, поэтому она может создавать только поле редактирования UTF16. Если вам нужно конвертировать между UTF8 и UTF16 или наоборот, взгляните на API MultiByteToWideChar и WideCharToMultiByte.
Редактировать: Исправлена проблема UTF16 / UCS2 согласно комментарию Дэвида ниже.