プロの声:MQLでマウスのスクロール値を取得する方法とは? [第5回フォーラムからの再掲載】。]

 
WindowsのDLLについてです。自分で書くことはまだ考えていない。


ネットサーフィンの結果、3つの 可能性があることがわかりました。

WM_MOUSEWHEELの取り扱いについて 1.
WM_INPUTの処理 2.
3.DirectInputからマウスデータを受信する。

最初のケースは、このイベントが処理されるウィンドウが存在することが前提です。残念ながら、私はMQLからターミナルウィンドウのメッセージキューにアクセスする方法を知らないので、このバリアントは失敗しました。http://www.rsdn.ru/article/baseserv/hookdll.xml

2番目のバリエーションもウィンドウを意味しますが、GetRawInputBuffer 関数を呼び出すことで、ターミナルを渡さずにデータを受信できるようになることを期待したのです。

登録・検索機能をすべて使わせていただきました。Namely:
GetRawInputDeviceInfo
GetRawInputDeviceList
GetRegisteredRawInputDevices
RegisterRawInputDevices

しかし、私が探していたGetRawInputBuffer 関数は動作しませんでした。バッファは空で、データは取り込まれていない。


残念ながら、私はLPDIRECTINPUTDEVICE8 / LPDIRECTINPUT8インターフェイスのインスタンスを取得する方法を知らないので、私は3番目の方法でも失敗しました。


専門家の皆さん、アドバイスをお願いします。


という質問に参加します。
 

まず、イベント発生の情報をどのような形で受け取るのか、直接なのか間接なのか、決めておくとよいでしょう。

DLLを自作するのは無理だとして、APIも廃止してはどうでしょう。間接法が適している場合。

ウィンドウ内の最初の可視バーのインデックスをチェックするスクリプトをループさせる必要があります - WindowFirstVisibleBar (ウィンドウ内のバー 数 - WindowBarsPerChartと一緒に行うこともできます).前の値と異なる場合は、チャートのチェックが行われたことになります。この場合、マウスホイールだけが原因ではない可能性があります(時間のズーム - "+"、"-"、ホームまたはエンドをクリックすると、目的の日付に直接ジャンプします)。

いずれにせよ、マウスホイールの回転イベントを検出するために何が必要なのか、まだ情報が十分ではありません。そして、方法を提案することができます。

P.S. また、ウィンドウ処理関数へのアクセスが必要な場合は、SetWindowLongPtr (msdn参照)です。しかし、ここではMQLコードにあるメッセージ処理プロシージャを新規に割り当てることができないので、DLLなしにはできません。

 

スクロールするチャートをコントロールしたい、という思いがありました。でも、コミルフォはダメですね...。

いいえ、スクロールホイールイベントを定義する必要があります。

 
Scriptong:

いずれにせよ、マウスホイールの回転イベントの検出に何が必要なのか、まだ十分な情報が得られていないのが現状です。そして、その方法を提案することができます。


具体的に何が必要なのでしょうか?

もちろん、回転させるためのリストです。:)

 

いいえ、フックです。 MQLで関数のアドレスを取得する方法がわかりません。
 
ターミナル・ウィンドウに、インターセプトを伴うイベント処理の カスタム・プロシージャをぶら下げる--それだけだ。
私はそうしました:
- ユーザーは、MTウィンドウを閉じるためにクリックします
- 私は尋ねる:あなたは、インジケータを変更しました - 保存?Yes No Cancel
キャンセルしても、誰もどこにも行きません。
Yes-保存して終了、No-保存して終了。
プリミティブなんです。

フックは関係ないんですよ、本当に。

> WindowsのDLLの話です。自分で書くことはまだ考えていない。

がんばってください・・・。
 
jartmailru:
ターミナルウィンドウには、インターセプトを伴うカスタムイベント処理プロシージャが必要です - それだけです。

SetWindowLongのことですか?
 
sergeev:
SetWindowLongのことですか?
はい。
 
sergeev:

具体的に何が必要なのでしょうか?

リスト回転はもちろん、他には?:)


リスト(CListCtrl)がそれ自身のオブジェクトである場合、何が問題なのでしょうか?マウスイベントを受信するのはリストであり、Meta Trader ウィンドウではありません。

それとも、MT4のチャートオブジェクトに基づいたリストのことでしょうか?

 
Scriptong:


リスト(CListCtrl)がそれ自身のオブジェクトである場合、何が問題なのでしょうか?マウスからのイベントを受け取るのはリストであり、Meta Traderのウィンドウではありません。

それとも、MT4のグラフィカルオブジェクトに基づいたリストのことでしょうか?


問題なければ、マウスホイールシフトのFACTの判定方法を明示してください。マウスポインタがMT4ウィンドウ内にある場合。とても興味深いです :)

もちろん、Windowsで。