VC++之绘制线条

我们可以在类向导那里添加OnLButtonDown消息响应函数,它有两个参数,其中第二个参数是CPoint类型,CPoint类表示一个点,也就是说,当鼠标左键按下时,鼠标单击处的坐标点已由此参数传递给OnLButtonDown这一消息响应函数。这样,我们所需的工作就是在此消息响应函数中保存该点的信息。为此,需要在视类中增加一个成员变量。在本例我创建的工程名为Draw,为单文档程序,在CDrawView类添加一个新的成员变量,

CPoint m_ptOrigin;

接下来在CDrawView构造函数中初始化这个变量,将其值初始化为0,。
然后在消息响应函数OnLButtonDown中保存鼠标按下点的信息

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    m_ptOrigin=point;
    CView::OnLButtonDown(nFlags, point);
}

这样就得到了要绘制线条的起点,两点成线,所以接下来要获得线条终点。终点是在鼠标左键弹起来时获得的。在CDrawView类中对WM_LBUTTONUP进行响应,初始代码如下:

void CDraw11View::OnLButtonUp(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default

    CView::OnLButtonUp(nFlags, point);
}

方法1:利用MFC的CDC类实现画线功能

void CDraw11View::OnLButtonUp(UINT nFlags, CPoint point) 
{
    CDC* pDC=GetDC();
    pDC->MoveTo(m_ptOrigin);
    pDC->LineTo(point);
    ReleaseDC(pDC);
    CView::OnLButtonUp(nFlags, point);
}

方法2:利用MFC的CClientDC类的实现画线功能,MFC提供的CClientDC类派生于CDC类,用来在窗口的客户区绘图,并且在构造时调用GetDC()获得与指定窗口相关联的设备描述表,在析构时调用Release()释放DC资源,使用方便。

void CDraw11View::OnLButtonUp(UINT nFlags, CPoint point) 
{
    CClientDC dc(this);//获得与视类窗口相关联的CClientDC对象
    dc.MoveTo(m_ptOrigin);
    dc.LineTo(point);
    CView::OnLButtonUp(nFlags, point);
}

这里写图片描述
方法3:利用MFC的CWindowDC类实现画线功能,CClientDC类对象只能在框架类窗口的客户区(视类区域+工具栏区域)画图,CWindowDC可以实现在窗口的整个区域画图

void CDraw11View::OnLButtonUp(UINT nFlags, CPoint point) 
{
    CWindowDC dc(GetParent());
    dc.MoveTo(m_ptOrigin);
    dc.LineTo(point);
    CView::OnLButtonUp(nFlags, point);
}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/lxjstudyit/article/details/52864838