2009-08-14 20 views
5

¿Cómo puedo comprobar si el botón izquierdo del mouse está presionado/arrastrando algo (prefiero la primera posibilidad).¿Comprueba si Mouse LButton está inactivo?

Probé Mouse.IsDraging, pero no produjo ningún resultado.

NOTA: Manejo los mensajes del mouse en mi aplicación así que no hay problema si es una WM, simplemente comparta una forma de realizar mi tarea.

+0

duplicado posible de [Delphi: ¿Cómo puedo comprobar si se pulsan los botones del ratón - Fuera de un evento de ratón] (http://stackoverflow.com/questions/25681543/delphi-how-can-i -check-if-any-mouse-buttons-are-pressed-outside-of-a-mouse-ev) – Johan

Respuesta

20

Hay una función API de Windows GetAsyncKeyState(), que a pesar de su nombre también se puede utilizar para obtener el estado de los botones del mouse. La documentación vinculada contiene directamente la respuesta a su pregunta:

La función GetAsyncKeyState funciona con los botones del mouse. Sin embargo, comprueba el estado de los botones físicos del mouse, no los botones lógicos del mouse con los que se asignan los botones físicos. Por ejemplo, la llamada GetAsyncKeyState(VK_LBUTTON) siempre devuelve el estado del botón izquierdo del mouse físico, independientemente de si está asignado al botón lógico izquierdo o derecho del mouse. Puede determinar la asignación actual del sistema de botones físicos del mouse a botones lógicos del mouse llamando al GetSystemMetrics(SM_SWAPBUTTON) que devuelve TRUE si los botones del mouse se han intercambiado.

El tipo de resultado es short, para comprobar si el bit más significativo sólo prueba si el valor es negativo.

+0

MUY bonito. Si bien brinda la solución para verificar el bit más significativo, ¿podría describir la forma formal de obtenerlo? – Vassilis

+0

@VassilisGr: Lo siento, realmente no entiendo esta solicitud. Dejar la coerción de tipo en el compilador es probablemente la mejor (es decir, la formal) que hacer, ya que lo aísla de problemas como la compilación de 32 contra 64 bits. ¿O te refieres a cómo probar si ese único bit en el resultado está configurado o no? Simplemente use algo como '(resultado y $ 8000) <> 0'. – mghie

+0

estaba buscando '(resultado y $ 8000) <> 0'. ¡Gracias! – Vassilis

0
OnMouseMove(UINT nFlags, CPoint point) 
{ 
    m_LButtonPressed=nFlags & MK_LBUTTON; 
    CWnd::OnMouseMove(nFlags, point); 
} 
Cuestiones relacionadas