MFC中如何将橡皮筋起点设为鼠标指针坐标
时间: 2024-02-26 12:57:36 浏览: 97
MFC实现获取鼠标坐标
5星 · 资源好评率100%
在MFC中,可以通过覆盖CWnd::OnLButtonDown()函数和CWnd::OnMouseMove()函数,来实现鼠标拖动橡皮筋的功能,具体步骤如下:
1. 在CWnd类中添加以下成员变量,用于记录橡皮筋的起点和终点坐标:
```
CPoint m_ptOrigin; // 起点坐标
CPoint m_ptEnd; // 终点坐标
```
2. 在CWnd类中覆盖OnLButtonDown()函数,获取鼠标点击时的坐标,并将其赋值给起点坐标m_ptOrigin:
```
void CMyWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
m_ptOrigin = point; // 记录起点坐标
SetCapture(); // 捕获鼠标消息
CWnd::OnLButtonDown(nFlags, point);
}
```
3. 在CWnd类中覆盖OnMouseMove()函数,获取鼠标移动时的坐标,并将其赋值给终点坐标m_ptEnd,然后调用Invalidate()函数,强制窗口重绘,以绘制橡皮筋:
```
void CMyWnd::OnMouseMove(UINT nFlags, CPoint point)
{
if (GetCapture() == this) // 判断是否捕获了鼠标消息
{
m_ptEnd = point; // 记录终点坐标
Invalidate(); // 强制重绘窗口,以绘制橡皮筋
}
CWnd::OnMouseMove(nFlags, point);
}
```
4. 在CWnd类中覆盖OnPaint()函数,根据起点坐标和终点坐标,绘制橡皮筋:
```
void CMyWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting
if (GetCapture() == this) // 判断是否捕获了鼠标消息
{
// 绘制橡皮筋
CBrush brush(HS_BDIAGONAL, RGB(255, 255, 255));
CPen pen(PS_SOLID, 1, RGB(0, 0, 0));
CBrush* pOldBrush = dc.SelectObject(&brush);
CPen* pOldPen = dc.SelectObject(&pen);
dc.Rectangle(CRect(m_ptOrigin, m_ptEnd));
dc.SelectObject(pOldBrush);
dc.SelectObject(pOldPen);
}
else // 如果没有捕获鼠标消息,则绘制普通的窗口内容
{
// TODO: Add your message handler code here
}
// Do not call CWnd::OnPaint() for painting messages
}
```
这样,当鼠标按下并移动时,就可以在窗口中绘制出橡皮筋了。
阅读全文