如何实现象window画图工具一样的画线呢?在利用鼠标画一条直线时,按住鼠标左键并托拽,先画出随鼠标移动的直线,当释放左键后才真正画出一条所需要的直线。
我在OnMouseMove()事件中,采用对客户区用白色填充的办法来实现,可是当画第二条线的时候,先前画的就没有了?
各位有什么高见呢?还有什么好方法呢?
我在OnMouseMove()事件中,采用对客户区用白色填充的办法来实现,可是当画第二条线的时候,先前画的就没有了?
各位有什么高见呢?还有什么好方法呢?
捕捉鼠标移动消息,在处理函数中得到坐标(B),MSDN查一下用CDC的成员函数,好像是
Lineto(起始点,B)
这个地方是有问题的,应该将画过线的DC作为背景保存,每次都应该重画这个背景。
比如,
没划线的时候,背景是一个白框(*pBackScreen)
开始画第一条线,每次RePaint的时候用*pBackScreen重画画板,再画移动的线
第一条线结束,那么背景就变成了刚刚画好的画板,重新设置*pBackScreen
开始画第二条线的时候,每次RePaint的时候用*pBackScreen重画画板,再画移动的线
依此类推。
OnMouseMove中
CClientDC dc(this);
CPen pen(0,0,RGB(0,0,0));
CPen* pOldPen = dc.SelectObject(&pen);
dc.SetROP2(R2_NOT);//设置成R2_NOT
if (mPointOld != point)
{
dc.MoveTo(mPointOrign);
dc.LineTo(mPointOld);
dc.MoveTo(mPointOrign);
dc.LineTo(point);
mPointOld = point;
}
OnLButtonDown中
mPointOrign = point;
mPointOld = point;
SetCapture();
OnLButtonUp中
ReleaseCapture();程序不是很完整,给一个思路把,OnMouseMove还要加点判断,比如鼠标放开,就不要在画线了,等等