MFC 动态画线 擦除前一次画的线 .... ....怎么解决啊。。。

我是在OnMouseMove()函数中添加了MoveTo()和LinTo()画线函数,也实现了动态画线,但是不能擦除前一次画线,导致屏幕上有好多的线,并且背景不是纯色,如... 我是在OnMouseMove()函数中添加了 MoveTo()和LinTo()画线函数,也实现了动态画线,但是不能擦除前一次画线,导致屏幕上有好多的线,并且背景不是纯色,如果是纯色我还可以把它画回去,实现擦除的样子....而现在的效果是下图那样......该怎么解决啊。。。。
我重载了OnPaint()函数 但是还是有上次画的线.... 求解决啊.......谢谢了。。。。
还有啊,当我把窗口最小化后再打开 原来画的所有线都没了......我想我如果能实现 最小化窗口类似的功能多好啊......

能不能说说思路或者要用到什么函数啊......
展开
 我来答
bhtzu
推荐于2016-10-23 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4214万
展开全部
  1. ·下次划线之前去掉onpaint中使用的划线位置之后Invalidate();(这样会闪屏一下)

  2. 对上面可以做优化,就是知道上次需要消除的位置,计算好之后InvalidateRect(CRect)只更新部分区域。

  3. 使用DC划线,有个pDC->SetROP2(R2_NOT);每次划线之前调用这个函数,需要消除的时候在原位置再划一次即可消除。这个是正宗动态划线方式,缺点是动态情况下线的颜色不好看。

cossbow
2013-05-11 · TA获得超过697个赞
知道小有建树答主
回答量:798
采纳率:100%
帮助的人:223万
展开全部
复制一段画橡皮线的代码给你看看
void CMy2DCADView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);

if(m_bIsPoint)
{
dc.Ellipse(point.x-1,point.y-1,point.x+1,point.y+1);
}

if(m_bIsLine)
{
if(m_nStep==0)
{
m_StartX=point.x;
m_StartY=point.y;
m_nStep++;
}
else
{

dc.MoveTo(m_StartX,m_StartY);
dc.LineTo(point.x,point.y);

m_StartX=point.x;
m_StartY=point.y;
}
}

CView::OnLButtonDown(nFlags, point);
}
void CMy2DCADView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
dc.SetROP2(R2_NOT ); //设置绘图混合模式。
if(m_bIsLine)
{
if(m_nStep!=0)
{
if(m_MoveStep==0) //m_MoveStep 表示画橡皮线步骤的变量
{

m_mEndX=point.x;
m_mEndY=point.y;

dc.MoveTo(m_StartX,m_StartY);
dc.LineTo(m_mEndX,m_mEndY);
m_MoveStep++;
}
else
{
m_mEndX1=point.x;
m_mEndY1=point.y;
dc.MoveTo(m_StartX,m_StartY);
dc.LineTo(m_mEndX,m_mEndY);
dc.MoveTo(m_StartX,m_StartY);
dc.LineTo(m_mEndX1,m_mEndY1);
m_mEndX=m_mEndX1;
m_mEndY=m_mEndY1;
}
}
}

CView::OnMouseMove(nFlags, point);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jellycgl
2013-05-11 · TA获得超过417个赞
知道小有建树答主
回答量:1149
采纳率:66%
帮助的人:892万
展开全部
造成这个现象很明显是由于没有刷新导致,否则不会最小化后就可以,可能你的代码中重载了OnEraseBack这个函数导致
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式