一些绘图或仿真软件都有这功能,随鼠标移动,始终有一条线从起点跟随到鼠标当前位置;这功能不只是随鼠标移动画线;实际要实现2个功能:擦除前一条线,再画一条从起点到当前鼠标位置的线;
环境Win10,VC6;新建一个单文档工程;
为视类添加鼠标移动消息处理函数;在其中画线;
为简单起见,设起点为(0,0),始终画一条线指向鼠标当前位置;
如果不进行擦除,效果是这样的;
视类头文件添加成员变量;pt1是起点,ptold为前一条线的终点;
CPoint ptold, pt1;
视类CPP文件构造函数中初始化;
ptold.x=0;
ptold.y=0;
pt1.x=0;
pt1.y=0;
视类鼠标移动消息处理函数代码:
void CLine1View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDC* pDC=GetDC();
//屏幕色取反,擦除前一条线
int nNew= SetROP2(pDC->m_hDC,R2_NOTXORPEN);
pDC->MoveTo(pt1);
pDC->LineTo(ptold);
//绘制起点到当前点的线
pDC->MoveTo(pt1);
pDC->LineTo(point);
ptold=point; //设置前一条线的终点用来下个鼠标移动消息擦除
CView::OnMouseMove(nFlags, point);
}
除了MoveTo、LineTo,还需要使用SetROP2;VC自身会把鼠标当前位置通过point传来;
SetROP2函数,该函数的主要的作用是根据参数设置的方式重新设定绘图的方式;
擦除之后效果如下;效果就对了;