XX
// 核心转换代码 MWNumericArray ConvertToMWArray(List<double> inputList) { // 步骤1:将List转换为double数组 double[] dataArray = inputList.ToArray(); // 步骤2:确定数组维度(MATLAB使用二维数组表示) int rows = inputList.Count; // 行数 = 元素个数 int columns = 1; // 列数 = 1(列向量) // 步骤3:创建二维数组容器 double[,] matlabMatrix = new double[rows, columns]; // 步骤4:填充二维数组 for (int i = 0; i < rows; i++) { matlabMatrix[i, 0] = dataArray[i]; } // 步骤5:生成MWNumericArray return new MWNumericArray(matlabMatrix); } #region 该部分代码用于在 窗体:uiTitlePanel_laser 里面显示matlab里面弹出的曲线数据 [DllImport("user32.dll")] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);// [DllImport("user32.dll")] public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool BRePaint); const int GWL_STYLE = -16;//检索窗口样式。 const int WS_CAPTION = 0x00C00000;//WS_CAPTION代表窗口有标题栏,~WS_CAPTION代表窗口没有标题栏 const int WS_THICKFRAME = 0x00040000;//窗口的边框 const int WS_SYSMENU = 0X00080000; [DllImport("user32")] private static extern int GetWindowLong(System.IntPtr hwnd, int nIndex);//该函数可获取指定窗口的有关信息 [DllImport("user32")] private static extern int SetWindowLong(System.IntPtr hwnd, int index, int newLong);//该函数用来改变指定窗口的属性 /// <summary>最大化窗口,最小化窗口,正常大小窗口 /// nCmdShow:0隐藏,3最大化,6最小化,5正常显示 /// </summary> [DllImport("user32.dll", EntryPoint = "ShowWindow")] public static extern int ShowWindow(IntPtr hwnd, int nCmdShow); [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); ////图像句柄,用于存储的matlab程序调用运行弹出的窗口, ///使用FindWindow 函数得到 static IntPtr hwnd_matlab; //public delegate 返回类型 委托名(参数类型 参数名, ...); //这个委托,laser窗口的曲线 public delegate void Gsz_Delegate_laser_curve(Sunny.UI.UITitlePanel gsz_UITitlePanel); //实例化这个委托,并且用函数给这个委托赋值 Gsz_Delegate_laser_curve gsz_delegate_laser_curve = gsz_fuction_update_ui_curve; public static void gsz_fuction_update_ui_curve(Sunny.UI.UITitlePanel gsz_UITitlePanel) { try { if (gsz_UITitlePanel.InvokeRequired) { gsz_UITitlePanel.BeginInvoke(new MethodInvoker(delegate { //设置matlab图像窗体的父窗体为panel SetParent(hwnd_matlab, gsz_UITitlePanel.Handle); //获取窗体原来的风格,GWL_STYLE是参数,意思说获取句柄为:figure1的串口的窗口样式 var style = GetWindowLong(hwnd_matlab, GWL_STYLE); //设置新风格,去掉标题,不能通过边框改变尺寸 SetWindowLong(hwnd_matlab, GWL_STYLE, style & ~WS_CAPTION & ~WS_THICKFRAME); //移动到panel里合适的位置并重绘 MoveWindow(hwnd_matlab, 0, 0, gsz_UITitlePanel.Width , gsz_UITitlePanel.Height , true); })); } else { //设置matlab图像窗体的父窗体为panel SetParent(hwnd_matlab, gsz_UITitlePanel.Handle); //获取窗体原来的风格,GWL_STYLE是参数,意思说获取句柄为:figure1的串口的窗口样式 var style = GetWindowLong(hwnd_matlab, GWL_STYLE); //设置新风格,去掉标题,不能通过边框改变尺寸 SetWindowLong(hwnd_matlab, GWL_STYLE, style & ~WS_CAPTION & ~WS_THICKFRAME); //移动到panel里合适的位置并重绘 MoveWindow(hwnd_matlab, 0, 0, gsz_UITitlePanel.Width , gsz_UITitlePanel.Height , true); } } catch (Exception) { } } #endregion