MT5/MT4 EA,Indicator操作パネルGUIを作る
行き詰ったところを、備忘録にしておく。
すぐに忘れてしまうので。
何でこんなことをしているのかというと、EAの動作をGUIで操作したいから、そして、EAのパラメーターをEAを停止・再起動させることなくOn The Flyで変更したいから、です。
ダイアログを複数表示するときの問題
ダイアログのボタンを押すと他のダイアログのボタンも押したことになる→イベントハンドラーマクロが原因だった
イベント処理するときに、
EVENT_MAP_BEGIN(CxxDialog)
ON_EVENT(ON_CLICK,m_xxButton,OnClickxxButton)
EVENT_MAP_END(CAppDialog)
とか書きますが、2つのダイアログを表示していて、それぞれ複数のボタン等を配置しているとき、片方のダイアログのボタンを押すと、もう1つのダイアログのボタンも押されたようになってしまいます。
なんで?と思って調べてみたら、
Controls\Defines.mqh 内のマクロの問題でした。
マクロ内ではボタンの番号しか確認してなかったのでした。
名前を確認してないのが原因。
こうオーバーライドすればOK。
//--- event handling by numeric ID
#define ON_EVENT(event,control,handler) if(id==(event+CHARTEVENT_CUSTOM) && lparam==control.Id() && sparam==control.Name()) { handler(); return(true); }