SciVision如何获取图像控件消息(获取鼠标移动、鼠标左键坐标值以及获取窗口ROI)

一.C++获取鼠标消息

1.在SciDef.h文件中 已经定义了窗口消息。在这里插入图片描述
新版本SciVision中添加了鼠标各类消息如下:
在这里插入图片描述
2.在类头文件中定义响应函数。

afx_msg LRESULT OnMousepressPosition(WPARAM wParam, LPARAM lParam);

在这里插入图片描述
3.在Cpp文件中添加消息映射。
添加对应的消息映射函数:

 //鼠标左键按下消息
ON_MESSAGE(WM_MOUSEPRESS_POSITION,&CPointDlg::OnMousepressPosition)
 
 //窗口ROI移动消息
ON_MESSAGE(WM_SIZE_CHANGED_SHAPE, &CPointDlg::OnSciMessage)

在这里插入图片描述
4.添加响应函数
//鼠标按下消息

afx_msg LRESULT CPointDlg::OnMousepressPosition(WPARAM wParam, LPARAM lParam)
{
	//鼠标在图像中的坐标值X
	int ImageWndX = 0;
	//当前鼠标在图像中的坐标值Y
	int ImageWndY=0;
	ImageWndX = (int)wParam;
	ImageWndY = (int)lParam; 
	return 0;
}

//窗口ROI移动消息

afx_msg LRESULT CPointDlg::OnSciMessage(WPARAM wParam, LPARAM lParam)
{
	  m_roiID = (long)wParam;    // long类型m_roiID  ROI的 ID号
	  return TRUE;
}

获取窗口ROI数据*
通过消息中获取的ROI 的ID 可获取ROI信息。
- - m_sciWnd 窗口ID
SciGetROI(m_sciWnd,m_roiID, m_ROI);//通过ROI ID获取ROI
在这里插入图片描述

二.C#获取鼠标消息
1.重载PictureBox类, 定义publicValue

在这里插入图片描述在这里插入图片描述

  class SciPictureBox : PictureBox 
    {
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)                               //判断系统消息的ID号     
            {
                case 0x0400 + 100:     //\ROI移动消息    
                    m.Result = (IntPtr)0;                 
                    publicValue.m_roiID = (int)m.WParam;  ///ROI ID
                    break;
                case 0x0400 + 107:  //鼠标移动消息
                    m.Result = (IntPtr)0;                  
                    publicValue.mousepressX = (int)m.WParam;  //X 坐标
                    publicValue.mousepressY = (int)m.LParam;  //Y 坐标
                    break;
                case 0x0400 + 108:  //鼠标左键按下消息
                     m.Result = (IntPtr)0;                  
                     publicValue.mousepressX = (int)m.WParam;  //X 坐标
                     publicValue.mousepressY = (int)m.LParam;  //Y 坐标
                    break;
                case 0x0400 + 109:  //鼠标左键弹起消息
                    m.Result = (IntPtr)0;
                    publicValue.mousepressX = (int)m.WParam;  //X 坐标
                    publicValue.mousepressY = (int)m.LParam;  //Y 坐标
                    break;
                case 0x0400 + 110:  //鼠标右键按下消息
                    m.Result = (IntPtr)0;
                    publicValue.mousepressX = (int)m.WParam;  //X 坐标
                    publicValue.mousepressY = (int)m.LParam;  //Y 坐标
                    break;
                case 0x0400 + 111:  //鼠标右键弹起消息
                    m.Result = (IntPtr)0;
                    publicValue.mousepressX = (int)m.WParam;  //X 坐标
                    publicValue.mousepressY = (int)m.LParam;  //Y 坐标
                    break;
                case 0x0400 + 112:  //鼠标左键双击消息
                    m.Result = (IntPtr)0;
                    publicValue.mousepressX = (int)m.WParam;  //X 坐标
                    publicValue.mousepressY = (int)m.LParam;  //Y 坐标
                    break;
                default:
                    base.WndProc(ref m);
                    break;
            }
        }
    }
    
  

 public class publicValue    {
                                public static int m_roiID;         //ROI的ID
                                public static int mousepressX;     //图像X坐标
                                public static int mousepressY;     //图像Y坐标
                              }

2.在初始化函数中绑定SCI图像控件

在这里插入图片描述
备注 :pictureBox1 为工具栏中的图像控件

 SciPictureBox m_pictureBox = new SciPictureBox();      //定义SCI图像控件
        pictureBox1.Controls.Add(m_pictureBox);        //将定义的SCI图像控件添加到winform图像控件上
        m_pictureBox.Width = pictureBox1.Width;
        m_pictureBox.Height = pictureBox1.Height;
       
        //声明全局对象图像控件
        //SciImageWndX axSciImageWndX1 = new SciImageWndX();
        axSciImageWndX1.SciCreateImageWnd((int)m_pictureBox.Handle);

获取窗口ROI数据
通过消息中获取的ROI 的ID 可获取ROI信息。
axSciImageWndX1.SciGetROI(publicValue.m_roiID, m_ROI);//通过ROI ID获取ROI

发布了16 篇原创文章 · 获赞 0 · 访问量 3158

猜你喜欢

转载自blog.csdn.net/OPT_Vision/article/details/95768046
今日推荐