¿Qué dicen los profesionales: cómo obtener los valores de desplazamiento del ratón en MQL? [reenvío desde el quinto foro].

 
Estamos hablando de la DLL de Windows. Todavía no se considera la posibilidad de escribir uno propio.


Tras navegar por la red, me he decidido por tres posibilidades:

Manejo de WM_MOUSEWHEEL 1.
Procesamiento de WM_INPUT. 2.
3. Recepción de datos del ratón desde DirectInput.

El primer caso supone que existe una ventana en la que se gestiona este evento. Lamentablemente no sé cómo llegar a la cola de mensajes de la ventana de la terminal desde MQL, por lo que esta variante se cayó. http://www.rsdn.ru/article/baseserv/hookdll.xml

La segunda variante también implica una ventana, pero esperaba que llamando a la función GetRawInputBuffer podría recibir datos sin pasar la terminal.

He podido utilizar todas las funciones de registro y recuperación. A saber:
GetRawInputDeviceInfo
GetRawInputDeviceList
GetRegisteredRawInputDevices
RegisterRawInputDevices

Pero la función GetRawInputBuffer que buscaba no funcionó. El búfer está vacío y no se capturan datos en él.


Lamentablemente, también he fallado con la tercera opción, porque no sé cómo conseguir una instancia de la interfaz LPDIRECTINPUTDEVICE8 / LPDIRECTINPUT8.


Expertos, ¿cuál es su consejo?


Me uno a la pregunta.
 

En primer lugar, convendría decidir de qué forma debe recibirse la información sobre la ocurrencia del evento: ¿directamente o indirectamente?

Suponiendo que escribir tu propia DLL no es una opción, ¿por qué no eliminar también la API? Si el método indirecto es adecuado:

Deberíamos hacer un bucle con un script que compruebe el índice de la primera barra visible en una ventana - WindowFirstVisibleBar (puede hacerlo junto con el número de barras en la ventana - WindowBarsPerChart). Si difieren del valor anterior, el gráfico ha sido revisado. Es cierto, en este caso no sólo la rueda del ratón podría ser la causa (zoom en el tiempo - "+", "-", haciendo clic en Inicio o Fin, salto directo a la fecha deseada).

En cualquier caso, aún no hay suficiente información para saber qué se requiere exactamente de la detección de un evento de giro de la rueda del ratón. Entonces puedes sugerir métodos.

P.D. Y si necesitas acceder a la función de manejo de ventanas, es SetWindowLongPtr (ver msdn). Pero aquí no se puede prescindir de la DLL, porque no se puede asignar un nuevo procedimiento de procesamiento de mensajes ubicado en el código MQL.

 

La idea de controlar el gráfico de desplazamiento, era. Pero no comilfo....

No, tienes que definir un evento de rueda de desplazamiento.

 
Scriptong:

En cualquier caso, todavía no hay suficiente información para saber exactamente lo que se requiere de la detección del evento de giro de la rueda del ratón. A continuación, se pueden sugerir métodos.


¿qué se necesita exactamente?

la lista para girar, por supuesto. ¿qué más? :)

 

No. Es un gancho. No sé cómo obtener la dirección de la función en MQL.
 
A la ventana del terminal cuelga un procedimiento personalizado de procesamiento de eventos con intercepción - y eso es todo.
Lo hice así:
- el usuario hace clic para cerrar la ventana de MT
- Pregunto: ¿cambió el indicador - guardar? Sí No Cancelar
Cuando se cancela nadie va a ninguna parte.
Sí-guardar y salir, no-guardar y salir.
Es primitivo.

Los ganchos no tienen nada que ver, en realidad.

> Estamos hablando de las DLL de Windows. Todavía no se considera la posibilidad de escribir la propia.

Buena suerte...
 
jartmailru:
La ventana de la terminal debe tener un procedimiento de manejo de eventos personalizado con intercepción - eso es todo.

¿Te refieres a SetWindowLong?
 
sergeev:
¿se refiere a SetWindowLong?
Sí.
 
sergeev:

¿qué se necesita exactamente?

la lista girando por supuesto. ¿qué más? :)


Si la lista (CListCtrl) es su propio objeto, ¿cuál es el problema? Es la lista la que recibe los eventos del ratón, no la ventana de Meta Trader.

¿O estamos hablando de una lista basada en los objetos de los gráficos de MT4?

 
Scriptong:


Si la lista (CListCtrl) es un objeto propio, ¿cuál es el problema? Es la lista la que recibe los eventos del ratón, no la ventana del Meta Trader.

¿O estamos hablando de una lista basada en objetos gráficos de MT4?


Si no hay ningún problema, por favor especifique cómo determinar el FACT del desplazamiento de la rueda del ratón. Cuando el puntero del ratón está en la ventana de MT4. Es muy interesante :)

Por supuesto, mediante Windows.