先搜集,后整理。
void CPicProcessDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
GetCursorPos(&sel_pos);
GetDlgItem(IDC_Pic1)->GetWindowRect(&rect);
if (rect.PtInRect(sel_pos))
{
ClipCursor(&rect);
rect_width = rect.right - rect.left;
rect_height = rect.bottom - rect.top;
xscale = m_image.cols / rect_width;
yscale = m_image.rows / rect_height;
m_startPoint.x = (sel_pos.x - rect.left) * xscale;
m_startPoint.y = (sel_pos.y - rect.top) * yscale;
}
move_flag = true;
CDialogEx::OnLButtonDown(nFlags, point);
}
void CPicProcessDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (move_flag)
{
GetCursorPos(&sel_pos);
GetDlgItem(IDC_Pic1)->GetWindowRect(&rect);
if (rect.PtInRect(sel_pos))
{
rect_width = rect.right - rect.left;
rect_height = rect.bottom - rect.top;
m_endPoint.x = (sel_pos.x - rect.left) * xscale;
m_endPoint.y = (sel_pos.y - rect.top) * yscale;
}
move_flag = false;
}
up_flag = true;
CDialogEx::OnMouseMove(nFlags, point);
}
void CPicProcessDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (up_flag)
{
GetCursorPos(&sel_pos);
GetDlgItem(IDC_Pic1)->GetWindowRect(&rect);
if (rect.PtInRect(sel_pos))
{
ClipCursor(NULL);
rect_width = rect.right - rect.left;
rect_height = rect.bottom - rect.top;
m_endPoint.x = (sel_pos.x - rect.left) * xscale;
m_endPoint.y = (sel_pos.y - rect.top) * yscale;
}
}
up_flag = false;
ROIrect.x = m_startPoint.x;
ROIrect.y = m_startPoint.y;
ROIrect.width = m_endPoint.x - m_startPoint.x;
ROIrect.height = m_endPoint.y - m_startPoint.y;
rectangle(m_tmpGray, ROIrect, Scalar(0, 255, 0));
DrawImgToHDC(m_tmpGray, IDC_Pic1);
ROI = m_repairImg(ROIrect);
CDialogEx::OnLButtonUp(nFlags, point);
}