インジケーターでメッセージボックス(MessageBox)を出力する方法

MessageBox関数はインジケーターでは機能しない

MT4の組込み関数の1つ、MessageBox関数はご存知でしょうか?

小さなダイアログボックスで、ユーザーに何かを通知する際に使うものですね。

こんなやつです。

メッセージボックス例

エラーメッセージや確認メッセージで使うのが一般的でしょうか。

さて、このMessageBox関数。実は、インジケーターでは無視されて動作しません。

公式リファレンスにも「The function can’t be called from custom indicators」とあります。

でも、インジケーターでメッセージボックスを出したい時ってありますよね?

そんな時はWindows APIの登場です!

脱線しますが、MT4に無いならWindows APIで何とかできないか?と考えると良いと思います。

Windows APIにはMessageBoxW関数というメッセージボックスを出力する関数がuser32.dllの中にあります。

これを使います。

まず、プログラムの最初の方で以下のインポートを行います。

#import "user32.dll"
  int MessageBoxW(int hWnd, string lpText, string lpCaption, int uType);
#import

これで、MQL4内でMessageBoxWを呼び出すことができるようになります。

あとは、メッセージボックスを出力したい箇所で以下のように呼び出します。

int hwnd = WindowHandle(Symbol(), Period());
MessageBoxW(hwnd, "メッセージ本文", "メッセージタイトル", MB_OKCANCEL);

hwndはウィンドウハンドルと呼ばれるもので、私はウィンドウの識別子と理解しています。

あとは、MessageBox関数と同じなので割愛します。

これで、無事インジケーター内でメッセージボックスを出力できるようになりました。

ちなみに、MessageBoxW関数に似た関数でMessageBoxA関数というのがありますが、MessageBoxA関数だと文字化けを起こします。

取り扱う文字コードの違いが原因です。末尾のAとWで分けられています。

MessageBoxWに関わらず、今後AとWの両方が存在する関数があったら、Wを使いましょう。

Windows APIを使えるようになると、アプリケーションのバリエーションが増えます。

私は偉そうに語れるほどWindows APIに精通しているわけではないので、いつも試行錯誤ですがとっても便利ですよ^-^

MT4の無料プログラミング講座

メルマガ登録して、MT4のプログラミング講座を無料で受けちゃおう!

超豪華プレゼントも盛りだくさん♪

MT4プログラミングを習得すると、オリジナルEA運用、作成代行、商品販売等、複数の収入源を手に入れられるよ。副業に最適だね!

↓↓↓ 詳細はこちら ↓↓↓

アイキャッチ

>

エターナル・パートナーPRO ~MT4裁量トレード支援ツール~ 「MT4は裁量トレーダーに優しくない」そう思ったことありませんか?もっと快適にトレードするための強力な売買ツールが必要だと考え、開発したのが「エターナル・パートナーPRO」です。元々は自分自身のために開発したツールですので、手抜き無しのガチものです。既に200名近い方に手に取っていただき、喜びの声が続々と届いております。ぜひご覧ください!

CTR IMG