// 核心转换代码
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