Странный ввод от WM_CHAR - WinAPI - PullRequest
0 голосов
/ 01 мая 2011

Это продолжение моего предыдущего вопроса: WinAPI: как обрабатывать ввод с клавиатуры в пользовательском элементе управления редактирования Я чувствовал, что должен поставить это в другой вопрос, поскольку природа вопроса немного другая.

Итак, моя программа сейчас получает данные, но они немного отключены. Лучший способ объяснить это просто показать вам код и результат ...

Вот код, который обрабатывает WM_CHAR:

    case WM_CHAR:
    {
        TCHAR inc;
        inc = MapVirtualKey(wParam, 2);

        for(short i = 0; i < sizeof(TCHAR); i++)
        {
            unsigned char* x = reinterpret_cast<unsigned char*>(&inc);
            printf("0x%.2X ", x[i]);
        }

        //InvalidateRect(t_hwnd, NULL, 0); // Repaint the window...

    }
    break;

Программа скомпилирована как Unicode, поэтому все вызовы функций по умолчанию имеют свои варианты Unicode.

Вот результат ввода asdf:

0x31 0x00 0x00 0x00 0x34 0x00 0x36 0x00
Размер TCHAR составляет 2 байта, так что получается "1 \ 046"

Кто-нибудь знает, что здесь происходит?

1 Ответ

1 голос
/ 01 мая 2011

MapVirtualKey принимает код сканирования для ключа. Но wParam в WM_CHAR - это не код сканирования - это символ. Вы должны использовать WM_KEYDOWN, wParam есть код сканирования.

Ссылки для вас:

http://msdn.microsoft.com/en-us/library/ms646280(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/ms646276(v=vs.85).aspx

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