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

 

posted @ 2025-02-20 11:44  wenluderen  阅读(5)  评论(0编辑  收藏  举报