記事をありがとう。とても参考になりました!
はい、この記事は役に立ちますが、ON_DBL_CLICKイベントの処理方法がわかりません。
ダブルクリックは、非常に短い時間間隔で2回クリックすることです。ですから、通常のクリックと同じ方法で処理できます。OnChartEventに スタティック変数を追加するだけです。https://www.mql5.com/ja/docs/constants/chartconstants/enum_chartevents の例を見て、次のようにしてください:
//+------------------------------------------------------------------+ //| チャートイベント機能| //+------------------------------------------------------------------+ void OnChartEvent(const int id, // イベント識別子 const long& lparam, // ロング・タイプのイベント・パラメータ const double& dparam, // double 型のイベント・パラメータ const string& sparam // 文字列型のイベント・パラメータ ) { //--- 最後にマウスをクリックした時刻 static uint last_click=0; //--- チャート上で左クリック if(id==CHARTEVENT_CLICK) { uint click_time=GetTickCount(); Print(「グラフ上でマウスをクリックした座標: x = ",lparam," y = ",dparam); if(click_time-last_click<dbl_click_time) { Print("DoubleClick!"); // その他のアクション } last_click=click_time; } //--- グラフィカル・オブジェクトをマウスでクリックする。 if(id==CHARTEVENT_OBJECT_CLICK) { Print("という名前のオブジェクトの上でマウスボタンを押す"+sparam+"'"); } //--- キーボードのボタンを押す if(id==CHARTEVENT_KEYDOWN) { switch(lparam) { case KEY_NUMLOCK_LEFT: Print("KEY_NUMLOCK_LEFTが押された"); break; case KEY_LEFT: Print("KEY_LEFTが押された"); break; case KEY_NUMLOCK_UP: Print("KEY_NUMLOCK_UPが押されました"); break; case KEY_UP: Print("KEY_UPが押された"); break; case KEY_NUMLOCK_RIGHT: Print("KEY_NUMLOCK_RIGHTが押された"); break; case KEY_RIGHT: Print("KEY_RIGHT"); break; case KEY_NUMLOCK_DOWN: Print("KEY_NUMLOCK_DOWNが押された"); break; case KEY_DOWN: Print("KEY_DOWNが押された"); break; case KEY_NUMPAD_5: Print("KEY_NUMPAD_5が押された"); break; case KEY_NUMLOCK_5: Print(「KEY_NUMLOCK_5が押されました。); break; default: Print("リストにないキーが押されました"); } ChartRedraw(); ...... }

- www.mql5.com
はい、この記事は役に立ちますが、ON_DBL_CLICKイベントの処理方法がわかりません。
正しい方法ですべてを行おうとすると、ON_DBL_CLICKイベントをキャッチすることは不可能です。CWnd::OnMouseUpにブレークポイントを置きました:
その結果、パネルをクリックしてもダブルクリックしても、カーソルはブレークポイントに行きません。がっかりだ。
さて、すべてを正しい方法で行おうとすると、ON_DBL_CLICKイベントをキャッチすることは不可能です。簡単なチェック方法は、パネルとダイアログの セクションにあるサンプルパネルを実行し、CWnd::OnMouseUpでブレークポイントを置くことです:
その結果、パネルをクリックしてもダブルクリックしても、カーソルはブレークポイントに行きません。うっそー。
解決策は別のスレッドhttps://www.mql5.com/ru/forum/239867#comment_7224345。

- 2018.04.23
- www.mql5.com
これは本当に良い記事だ。とても気に入っている。とてもよく書けている。
ありがとう!
このトピックに近づき、あるいは深めるための素晴らしい記事だ。
残念なことに、ビジュアル・ダイアログ・エディターがシステムに欠けているという事実は変わりません。
さらに、ダイアログ内のマウス・イベントは正しくインターセプトされず、マウス・ボタンが押されるとチャートがバックグラウンドで動きます。
また、インジケーターのツールチップはダイアログを通して表示されます。
これはDoerkのコードが修正されたにもかかわらずです。
MetaTrader 5のCWndContainer ライブラリの置き換え https://www.mql5.com/ja/code/13722
Metaquotesはどうしてこれを無視して修正しないほど頑固なのだろう。

- 投票: 24
- 2016.09.01
- Doerk Hilger
- www.mql5.com
このトピックに近づき、あるいは深めるための素晴らしい記事だ。
残念なことに、ビジュアルなダイアログ・エディターがシステムに欠けているという事実は変わらない。
さらに、ダイアログ内のマウス・イベントは正しくインターセプトされず、マウス・ボタンが押されるとチャートがバックグラウンドで動いてしまいます。
また、背後にあるインジケータのツールチップがダイアログを通過してしまいます。
これはDoerkのコードが修正されたにもかかわらずです。
MetaTrader 5用CWndContainerライブラリの置き換え https://www.mql5.com/ja/code/13722
Metaquotesはどうしてこれを無視し、修正しないほど頑固なのでしょうか。
オットー 何があなたを悩ませているのか理解しました。
MT5のグラフィック・ プログラミングでいじりすぎた点があったので、お別れしました。
MQがそこでどんなコンセプトを追求しているのかは知りませんが、彼らは非常に間違った方向に進んでいると思います。
ウィンドウには特別なグラフィックのフレームワークが組み込まれている。
彼らはいつもセキュリティについて話しているので、可能な限りカプセル化している。
データへのAPIを提供し、どの言語を使うかはユーザーに決めさせればいい。それが現代的な方法だろう。
挨拶

- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事 任意の複雑さのレベルのグラフィカルなパネルを作成する方法 はパブリッシュされました:
この記事では、CAppDialog クラスに基づいてパネルを作成する方法と、パネルにコントロールを追加する方法について詳しく説明します。 パネルの構造とオブジェクトの継承を示すスキームを提供します。 この記事では、イベントの処理方法、および依存コントロールへの配信方法についても説明します。 その他の例では、サイズや背景色などのパネルパラメータを編集する方法を示します。
標準ライブラリの [パネルとダイアログ] セクションのオブジェクトが作成され、次のオーダーで適用されます。 最初に "Border " オブジェクトが作成され、その中にパネルの背景が "Back " オブジェクトとして追加されます。 次に、クライアント領域 "ClientBack " がバックグラウンドで適用されます。 子コントロールは、クライアント領域内に追加できます。 パネルの名前と2つのコントロールボタンを持つキャプションオブジェクトが、パネルの上部に追加されます。
作者: Vladimir Karputov