一.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