首先,应该决定以何种形式接收关于事件发生的信息:直接还是间接?
假设编写自己的DLL不是一种选择,为什么不把API也取消呢?如果间接方法是合适的。
我们应该循环一个脚本,检查窗口中第一个可见条的索引--WindowFirstVisibleBar(你可以和窗口中的条数 一起做--WindowBarsPerChart)。如果它们与前一个值不同,则说明图表已被检查过。的确,在这种情况下,不仅是鼠标滚轮可能是原因(放大时间--"+","-",点击原点或终点,直接跳到所需的日期)。
在任何情况下,目前还没有足够的信息来知道检测鼠标滚轮旋转事件到底需要什么。然后你可以提出方法。
P.S. 如果你需要访问窗口处理函数,它是SetWindowLongPtr(见msdn)。但在这里你不能没有DLL,因为你不能分配位于MQL代码中的新的消息处理程序。
控制滚动图的想法,是。但不是comilfo....
不,你需要定义一个滚轮事件。
Scriptong:
在任何情况下,目前还没有足够的信息来知道到底需要从鼠标滚轮旋转事件检测中得到什么。然后可以提出方法。
具体要求是什么?
当然是名单。还有什么?:)
sanyooooook:
可能会有帮助。
不,这是一个钩子。 我不知道如何在MQL中获得该函数的地址。
jartmailru:
终端窗口应该有一个带有拦截功能的自定义事件处理程序--仅此而已。
你是说SetWindowLong?
终端窗口应该有一个带有拦截功能的自定义事件处理程序--仅此而已。
sergeev:
你是说SetWindowLong?
是的。
你是说SetWindowLong?
sergeev:
具体要求是什么?
当然了,名单在转动。还有什么?:)
如果列表(CListCtrl)是它自己的对象,那有什么问题?接收鼠标事件的是列表,而不是Meta Trader 窗口。
还是我们说的是基于MT4图表对象的列表?
Scriptong:
如果列表(CListCtrl)是它自己的对象,问题是什么?接收鼠标事件的是列表,而不是Meta Trader的窗口。
还是说我们说的是基于MT4图形对象的列表?
如果没有问题,请说明如何确定鼠标滚轮移动的FACT。当鼠标指针在MT4窗口时。这是非常有趣的 :)
当然--通过Windows的方式。
在网上冲浪后,我决定了三种 可能性。
处理WM_MOUSEWHEEL 1.
处理WM_INPUT. 2.
3.接收来自DirectInput的鼠标数据。
第一个选项建议有一个处理该事件的窗口。不幸的是,我不知道如何从MQL进入终端窗口的消息队列,因此这个变体被淘汰了。http://www.rsdn.ru/article/baseserv/hookdll.xml
第二种变体也意味着一个窗口,但我希望通过调用GetRawInputBuffer 函数,我可以不通过终端就能接收数据。
我已经能够使用所有的注册和检索功能。即:
GetRawInputDeviceInfo
GetRawInputDeviceList
GetRegisteredRawInputDevices
RegisterRawInputDevices
但我要找的GetRawInputBuffer 函数没有工作。缓冲区是空的,没有数据被捕捉到。
不幸的是,我的第三个方案也失败了,因为我不知道如何获得LPDIRECTINPUTDEVICE8 / LPDIRECTINPUT8接口的实例。
专家们,你们有什么建议?