Как обрабатывать сочетания клавиш Ctrl + X - PullRequest
0 голосов
/ 09 мая 2011

Я получаю первое сообщение, но не второе, когда я нажимаю Ctrl + Введите вместе. Как я могу это исправить?

case WM_KEYDOWN:
    if (GetKeyState(VK_CONTROL) & 0x8000) {
        MessageBox(0, "Ctrl", "Key", 0);
        switch (wParam) {
            case VK_RETURN:
                MessageBox(0, "Enter", "Key", 0);
                break;
        }
    }
    break;

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

Вместо обработки низкоуровневых событий нажатия клавиш лучше всего обрабатывать такие действия клавиатуры с помощью ускорителей.

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

Ускорители обычно используются для команд прикладного уровня - например. Ctrl-N , чтобы открыть новый документ. Если эта комбинация клавиш специфична для этого HWND - например. если это клавиатурная команда для конкретного элемента управления, то обработка ее в элементе управления - это то, что нужно.

Мое предположение относительно того, что происходит в вашем коде, выглядит следующим образом: когда вы нажимаете Ctrl + Enter, Windows генерирует два WM_KEYDOWN сообщения; один для CTRL и один для ENTER. когда вы получаете один для CTRL , вы отображаете окно сообщения, и теперь его внутренний цикл сообщений вступает во владение - он будет получать любые дальнейшие данные, пока не будет отклонен.

Попробуйте отбросить первый MessageBox (вы все равно знаете, что достигаете этой точки), и просто посмотрите, не получил ли второй удар. Или используйте метод диагностики (например, OutputDebugString()), который не будет мешать вводу.

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