Расширение события щелчка мыши - C - PullRequest
2 голосов
/ 15 февраля 2010

В настоящее время я обнаруживаю x и y позицию щелчка мыши, сохраняю ее в Point и отображаю ее в окне сообщения.

Я хочу иметь возможность читать, если удерживать нажатой другую клавишу клавиатуры, например, Shift или Control.

Глядя на MSDN, я нашел следующую информацию:

wParam Указывает, являются ли различные виртуальные ключи не работают. Этот параметр может быть одним или несколькими из следующих значения.

MK_CONTROL Клавиша CTRL нажата.

MK_MBUTTON Средняя кнопка мыши вниз.

MK_RBUTTON Правая кнопка мыши вниз.

MK_SHIFT Клавиша SHIFT не работает.

MK_XBUTTON1 Windows 2000 / XP: первый Кнопка Х нажата.

MK_XBUTTON2 Windows 2000 / XP: вторая кнопка Х нажата.

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

Вот мой прогресс:

LRESULT CALLBACK WindowFunc(HWND hMainWindow, UINT message,
    WPARAM wParam, LPARAM lParam)
{
 POINTS mouseXY;
 WCHAR buffer[256];

    // Act on current message
    switch(message)    
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
 case WM_LBUTTONUP:
  // Get mouse x, y
  mouseXY = MAKEPOINTS(lParam);

  // Output the co-ordinates
  swprintf(buffer, 255, L"x = %d, y = %d", mouseXY.x, mouseXY.y);
  MessageBox(0, buffer, L"Mouse Position", MB_OK);
  break;
    default:
        return DefWindowProc(hMainWindow, message, wParam, lParam);
    }
    return 0;
}

Спасибо за помощь

Ответы [ 2 ]

1 голос
/ 15 февраля 2010

Различные виртуальные ключи объединены в wParam. Чтобы проверить отдельные значения, вы должны их И (продумать основные битовые операции).

Пример:

swprintf(buffer, 255, L"x = %d, y = %d, Shift = %s, Ctrl = %s",
         mouseXY.x, mouseXY.y,
         wParam & MK_SHIFT ? L"yes" : L"no",
         wParam & MK_CONTROL ? L"yes" : L"no");
1 голос
/ 15 февраля 2010

Вы можете использовать GetAsyncKeyState , чтобы узнать состояние большинства кнопок:

SHORT lshift = GetAsyncKeyState(VK_LSHIFT);
SHORT rshift = GetAsyncKeyState(VK_RSHIFT);
// etc...

Здесь - это описание разницы между GetKeyState и GetAsyncKeyState.

Вы также можете использовать GetKeyboardState :

BYTE keyboardState[256];
GetKeyboardState(keyboardState);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...