当前位置: 源码素材网 » VC++教程 » 详情页

vc++用GDI 实现画直线时的橡皮筋效果

  •   时间:2019-04-14
  • 概述:画线 橡皮筋

vc++基于GDI 实现画线橡皮筋效果,鼠标画直线时,用户只有在松开鼠标键后才能看见直线,对直线的变化不能进行实时观测。橡皮筋效果就是通过动态地显示直线,实时观察直线最终的形状,给用户带来很多方便。本实例将讲解如何在画直线时实现橡皮筋效果。实现方法:

使用ClassWizard 重载3 个与鼠标相关的函数:按下鼠标左键函数(OnLButtonDown)、抬起鼠标左键函数(OnLButtonUp)、鼠标移动函数(OnMouseMove)。OnLButtonDown 用于记录所画直线的起始坐标;OnLButtonUp 用于记录直线终点坐标,并画出该直线;OnMouseMove 用于动态显示直线,主要有两个动作:删除上一鼠标光标位置所画的直线,在新的鼠标光标位置画出从起点(OnLButtonDown 所确定的点)到此时鼠标光标位置的直线。程序代码为:

(1)通过AppWizard 创建单文档程序DrawLine。

(2)使用ClassWizard 重载3 个与鼠标相关的函数。

void CDrawLineView::OnLButtonDown(UINT nFlags, CPoint point)
{
// m_LineEnd,m_LineStart 为CPoint 型数据,用于记录直线起始点坐标
m_LineEnd=m_LineStart=point;
CView::OnLButtonDown(nFlags, point);
}
void CDrawLineView::OnLButtonUp(UINT nFlags, CPoint point)
{
//因为在多个函数中都要进行画线操作,所以本例将画线过程做成一个函数,函数名为DrawLine
m_LineEnd=point; //记录直线终点坐标
DrawLine(0); //该函数用于画一条从m_LineStart 到m_LineEnd 的直线
CView::OnLButtonUp(nFlags, point);
}
void CDrawLineView::OnMouseMove(UINT nFlags, CPoint point)
{
//只有在按住鼠标左键不放,并移动鼠标事才能看到橡皮筋效果
if (nFlags & MK_LBUTTON)
{
DrawLine(true); //删除前一鼠标位置所画的直线
m_LineEnd=point;
DrawLine(true); //在新的鼠标位置画出m_LineStart 到point 的直线
}
CView::OnMouseMove(nFlags, point);
}

(3)手工添加画线函数DrawLine。首先在DrawLineView.h 中添加函数声明:

public:
CPoint m_LineEnd,m_LineStart;
void DrawLine(bool stretch);

在DrawLineView.cpp 中加入函数体:

void CDrawLineView::DrawLine(bool stretch)
{
CClientDC dc(this);
if (stretch )
dc.SetROP2(R2_NOT); //设置异或屏幕画图方式
//画线
dc.MoveTo(m_LineStart);
dc.LineTo(m_LineEnd);
}

    相关声明:

      若“vc++用GDI 实现画直线时的橡皮筋效果”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。