在mfc里面,针对一个图片在picture control里面,通过鼠标拖出矩形,然后将矩形的4个参数自动记录下来
时间: 2023-05-28 08:05:44 浏览: 94
可以通过以下步骤实现:
1. 在picture control的OnLButtonDown和OnLButtonUp事件中记录鼠标按下和松开的坐标。
2. 在OnMouseMove事件中,判断鼠标是否处于拖动状态,如果是则计算出矩形的左上角和右下角坐标,并根据这些坐标重新绘制矩形。
3. 在OnLButtonUp事件中,根据矩形的左上角和右下角坐标计算出矩形的宽度和高度,并将这些参数记录下来。
4. 在需要使用矩形参数的地方,可以直接调用记录下来的参数进行操作。
下面是一个简单的示例代码:
void CPictureCtrlDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bDragging = TRUE;
m_ptStart = point;
m_ptEnd = point;
CDialogEx::OnLButtonDown(nFlags, point);
}
void CPictureCtrlDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bDragging = FALSE;
m_ptEnd = point;
m_nWidth = abs(m_ptStart.x - m_ptEnd.x);
m_nHeight = abs(m_ptStart.y - m_ptEnd.y);
CDialogEx::OnLButtonUp(nFlags, point);
}
void CPictureCtrlDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_bDragging)
{
m_ptEnd = point;
m_nWidth = abs(m_ptStart.x - m_ptEnd.x);
m_nHeight = abs(m_ptStart.y - m_ptEnd.y);
m_rcRect.left = min(m_ptStart.x, m_ptEnd.x);
m_rcRect.top = min(m_ptStart.y, m_ptEnd.y);
m_rcRect.right = max(m_ptStart.x, m_ptEnd.x);
m_rcRect.bottom = max(m_ptStart.y, m_ptEnd.y);
InvalidateRect(NULL);
}
CDialogEx::OnMouseMove(nFlags, point);
}
void CPictureCtrlDlg::OnPaint()
{
CPaintDC dc(this);
CRect rcClient;
GetClientRect(&rcClient);
CBrush brush(RGB(255, 255, 255));
dc.FillRect(rcClient, &brush);
if (m_bDragging)
{
CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
CPen* pOldPen = dc.SelectObject(&pen);
dc.Rectangle(&m_rcRect);
dc.SelectObject(pOldPen);
}
}
在上面的代码中,m_bDragging表示鼠标是否处于拖动状态,m_ptStart和m_ptEnd表示矩形的左上角和右下角坐标,m_nWidth和m_nHeight表示矩形的宽度和高度,m_rcRect表示矩形的参数。在OnPaint事件中,如果鼠标处于拖动状态,则绘制矩形。
阅读全文