在MFC当中,所有与作图相关的操作,MFC提供这样的一种类 CDC
5.曲线作法:
之前的都是一条条线段,而曲线是由一系列点来组成的,可以知道我们都是在鼠标按下
左键时,而产生的一系列的点,应该要有两点:
一,是起点要保存(之前已经做过了)
二,是把所有的点都要捕获,可以用鼠标移动的消息响应,所以应该的View类中添加
消息WM_MOUSEMOVE,这个消息的作用,只要移动鼠标,那么这个消息都被捕获到,
这不是我们要的。
所以要判断什么时候,让它来捕获!可以添加一个BOOL变量在View类中
也就是当鼠标按下时,它为真,抬起时,为假。
CDrawView::CDrawView()
{
// TODO: add construction code here
// m_ptOrigin=0;
m_pOld=0;
m_bDraw=FALSE;//BOOL变量的初始化
}
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
// MessageBox("View clicked");
m_bDraw=TRUE;
m_ptOrigin=m_pOld=point;
CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bDraw=FALSE;
CView::OnLButtonUp(nFlags, point);
}
然后在移动鼠标的函数中
再进行判断
void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(100,250,120));
CPen *pOldpen=dc.SelectObject(&pen);//选到设备描述表当中
if(m_bDraw==TRUE)
{
dc.MoveTo(m_ptOrigin);//移动到原点
// dc.LineTo(point);//画到终点
dc.LineTo(m_pOld);//添加变量m_pOld,初始化0,赋值为原点,
dc.MoveTo(m_pOld);//相当于在终点上边上一条线
dc.LineTo(point);
m_pOld=point;
}
dc.SelectObject(pOldpen);
CView::OnMouseMove(nFlags, point);
}
效果图::::