2012-05-25 5 views
1

Что является наиболее подходящим способом получения положения курсора мыши или состояния кнопки в Windows (Windows 7 и выше)? Я ранее использовал DirectInput, но я больше не использую его и не хочу. Я видел, что есть GetCursorPos, однако я ничего не вижу для получения состояний кнопок мыши. Я читал ранее, что просто чтение оконных сообщений (например, WM_LBUTTONUP) считалось «медленным» для приложений реального времени, поэтому я не знаю ни одного другого варианта.Получение положения курсора мыши и состояния кнопки в Windows

ответ

5

Если вы хотите опросить/запросить текущую позицию курсора, вы можете использовать GetCursorPos. Чтобы увидеть состояния кнопок, используйте GetAsyncKeyState.

Если вы выполняете цикл сообщений в окне, уведомление, которое вы получите для движения мыши, равно WM_MOUSEMOVE. Вы будете уведомлены о входах мыши через перечисленные уведомления here.

+0

Если я правильно помню, 'GetCursorPos' будет текущим с последнего обработанного сообщения. Если вы хотите, чтобы состояние ключа было согласовано с позицией, вы должны использовать 'GetKeyState', который также является текущим по состоянию на последнем обработанном сообщении. –

+0

@AdrianMcCarthy: Нет, 'GetCursorPos' идет с' GetAsyncKeyState', а 'GetMessagePos' идет с' GetKeyState'. – jamesdlin

+0

@jamesdlin: Ах, спасибо за исправление. –

2

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

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

Смежные вопросы