На данный момент я просто использую сообщение WM_MOUSEMOVE, но он ограничивает движение мыши максимальным разрешением. Итак, что лучший способ захвата мыши с помощью Win32 (в окне OpenGl)? Я не хочу использовать freeglut или любую дополнительную библиотеку.
Для игр и в реальном времени DirectInput очень подходит, он умеренно сложный в использовании.
Это не основной win32 api, winapi способ получения ввода - это GetCursorPos/SetCursorPos, управляемый вашим собственным циклом обновления, поэтому вы запрашиваете и перезагружаете свою собственную частоту.
Или SetCapture, а затем WM_MOUSEMOVE вы вызываете SetCursorPos. Пункт установки курсора pos - дать место для движения, чтобы вы могли получить дельта, сумму, которую курсор перемещал с момента последнего обновления, а затем вернули курсор в центр вашего окна.
Ваши лучшие ставки - либо использовать DirectInput (который может быть немного больно настроен), либо RawInput.
Существует довольно обширный пример, доступный на странице " Использование RawInput" (см. Пример 2).
Если вы хотите, чтобы иметь возможность захватывать события мыши после того, как мышь существовала в окне, вы можете захотеть просмотреть функцию SetCapture
Если ваша проблема заключается в том, что вы хотите сделать игру FPS и хотите, чтобы ваш персонаж мог вращаться в непрерывном движении, то вы хотите установить положение мыши в центр окна после каждого события перемещения мыши и обработать входные данные на основе на разницу между положением курсора при запуске события перемещения мыши и в центре экрана. Чтобы установить положение мыши, вы можете использовать функцию SetCursorPos.