在VC mfc单文档中怎么实现鼠标左键长按有拖尾效果
时间: 2024-02-03 21:13:48 浏览: 189
可以在 MFC 应用程序框架中的 CView 类中重载 OnMouseMove 函数,在该函数中获取鼠标左键的状态,然后通过 CDC 的相关函数在视图上绘制一个拖尾效果。
具体步骤如下:
1. 在 CView 类中添加成员变量,用于记录鼠标左键是否按下以及鼠标上一次的位置:
```c++
class CMyView : public CView
{
protected:
BOOL m_bLButtonDown; // 鼠标左键是否按下
CPoint m_ptPrev; // 鼠标上一次的位置
...
};
```
2. 在 CView 类的构造函数中初始化成员变量:
```c++
CMyView::CMyView()
{
m_bLButtonDown = FALSE;
...
}
```
3. 重载 OnLButtonDown、OnLButtonUp 和 OnMouseMove 函数,处理鼠标左键按下、松开和移动事件:
```c++
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bLButtonDown = TRUE;
m_ptPrev = point;
CView::OnLButtonDown(nFlags, point);
}
void CMyView::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bLButtonDown = FALSE;
CView::OnLButtonUp(nFlags, point);
}
void CMyView::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_bLButtonDown)
{
CDC* pDC = GetDC();
pDC->SetROP2(R2_NOTXORPEN);
pDC->MoveTo(m_ptPrev);
pDC->LineTo(point);
m_ptPrev = point;
ReleaseDC(pDC);
}
CView::OnMouseMove(nFlags, point);
}
```
在 OnMouseMove 函数中,如果鼠标左键按下,就获取设备上下文 DC,设置绘图模式为异或笔,绘制一条从鼠标上一次的位置到当前位置的线段,然后更新鼠标上一次的位置。注意,要在释放设备上下文 DC 之前调用 ReleaseDC。
阅读全文