1 画连续的直线的思路
- 1)鼠标按下,记录要开始画直线的起点。
- 2)鼠标移动时,终点作为下一次的起点。
- 3)由于鼠标会抬起,所以需要标志位去记录鼠标的按下与抬起,即鼠标按下才画图,不按下不按图。
鼠标按下事件:
void CMFC_FirstView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CView::OnLButtonDown(nFlags, point);
//鼠标按下记录起点
m_point = point;
m_ispreset = true;
}
鼠标移动事件:
void CMFC_FirstView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CView::OnMouseMove(nFlags, point);
if (m_ispreset) {
CClientDC cd(this);
cd.MoveTo(m_point);//设定画家起点
cd.LineTo(point);//按照鼠标移动的方向画线
m_point = point;//终点作为下一次起点
}
}
鼠标抬起事件:
void CMFC_FirstView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CView::OnLButtonUp(nFlags, point);
m_ispreset = false;
}
注意OnMButtonUp并非鼠标左键抬起事件,区分一下,这个应该是中键。
两个添加的成员变量:
private:
CPoint m_point;
private:
bool m_ispreset;
结果: