2-画线

画线

首先在View增加消息OnLButtonDown和OnLButtonUp

1.在View类中添加点成员用于保存鼠标按下和松开接收到的Point参数

//View类中
protected:
CPoint m_start;
CPoint m_stop;

//LBottonDown函数中
m_start = point;

//LBottonUp函数中
m_stop = point;

2.ScreenPoint和ClientPoint

  • ScreenPoint:屏幕坐标,代表整个屏幕的坐标值

  • ClientPoint:用户坐标,代表当前窗口的坐标值

3.注意消息传递

除了View不需要继续往下传递消息,其它都需要继续往下传递消息。

4.获取设备上下文

CDC* pDC = GetDC();			//获取设备上下文

设备上下文是指当前窗口的各种参数,并用一个指针指向这些参数

5.画线

pDC->MoveTo(m_start);
pDC->LineTo(m_stop);

6.释放上下文

用完上下文一定要释放,让其它使用者也能获取到。

ReleaseDC(pDC);

7.绘制过程不能显示的问题解决

7.1增加成员绘制状态
BOOL m_status;		//绘制状态
7.2增加鼠标移动消息

OnMouseMove消息

7.3在鼠标移动过程中更新中间点
if (m_status)
{
m_cur = point;
InvalidateRect(NULL); //重绘函数,调用OnDraw
}
7.4将绘制过程放到OnDraw函数中

OnDraw每次需要重绘都会被调用,因此将绘制放到OnDraw中,即使窗口被放大缩小,线条不会消失而是重绘。

if (m_status)
{
pDC->MoveTo(m_start);
pDC->LineTo(m_cur);
}
else
{
pDC->MoveTo(m_start);
pDC->LineTo(m_stop);
}

8.绘制多条线

用一个列表存储以往线条,再在OnDraw里绘制列表中所有的线即可。