Как создать элемент управления для редактирования Unicode, который будет принимать символы с кодами выше 127 - PullRequest
0 голосов
/ 12 февраля 2011

Как создать перетаскивание элемента управления редактирования Unicode UTF8 из панели инструментов, которое будет принимать символы с кодами выше 127?

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

1 Ответ

3 голосов
/ 13 февраля 2011

Предполагается, что вы пишете это в 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 согласно комментарию Дэвида ниже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...