如何通过.DLL文件将winform加载到Metatrader 4终端图中

时间:2016-11-20 14:58:00

标签: c# winapi metatrader4

我想在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似乎没有反应。

Form loaded with application run method

如果我以这种方式加载面板

panels[inMT4hwnd].Show();

面板部分加载,按钮变白,面板和Metatrader 4终端都挂起。

Q1:这样做的正确方法是什么?

Q2:是否有一些特殊的winAPI内容我需要跳舞以使表单在metatrader过程中正常工作?

我查找了线程,任务,异步内容。有人能引导我朝着正确的方向前进吗?

如果我可以将表单加载到内部&#39;那将是很好的。 Metatrader的窗户就像一扇儿童窗户。

0 个答案:

没有答案