我想在MT4中使用winform,我知道这是可能的。 Metatrader4有自己的c ++风格语言,可以导入.DLL-s,但我们只能使用 stdcall
CallingConvention。
我在Visual Studio 2015中使用C#来创建.DLL
我的方法是:
从Metatrader 4终端,我调用.DLL中的一个函数来启动winform,我也传递窗口句柄,因为它使用它作为ID来跟踪什么图表只是调用.DLL
我使用键值字典存储面板对象。
以下是加载表单的过程。
// key,value dictionary holding forms
private static Dictionary<int, TradePanelForm> panels = new Dictionary<int, TradePanelForm>();
// start panel assosicated by window handle
[DllExport("OpenPanel", CallingConvention.StdCall)]
public static void OpenPanel(int inMT4hwnd)
{
if (!panels.ContainsKey(inMT4hwnd))
{
// add the panel object to the dictionary list
panels.Add(inMT4hwnd, new TradePanelForm(inMT4hwnd));
}
Application.Run(panels[inMT4hwnd]);
// panels[inMT4hwnd].Show();
}
如果我使用
Application.Run(panels[inMT4hwnd]);
表单将会打开,但似乎是焦点&#39;在关闭专家组之前,Metatrader 4 Terminal似乎没有反应。
如果我以这种方式加载面板
panels[inMT4hwnd].Show();
面板部分加载,按钮变白,面板和Metatrader 4终端都挂起。
Q1:这样做的正确方法是什么?
Q2:是否有一些特殊的winAPI内容我需要跳舞以使表单在metatrader过程中正常工作?
我查找了线程,任务,异步内容。有人能引导我朝着正确的方向前进吗?
如果我可以将表单加载到内部&#39;那将是很好的。 Metatrader的窗户就像一扇儿童窗户。