我在OnMouseMove()添加:
CClientDC dc(this);
CPen pen(PS_SOLID,5,RGB(255,0,0));
CPen *pOldPen=dc.SelectObject(&pen);
if(m_bDraw==TRUE)
{
dc.SetROP2(R2_XORPEN);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SetROP2(R2_XORPEN);
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptDraw);
m_ptDraw=point;
}
dc.SelectObject(pOldPen);
这样产生了两个问题:
1.由于先异或了说一很难配出我要的颜色,特别时当背景色不是纯色,例如背景为一幅图片时,我所要绘制的线颜色就不能保持我在画笔中设置的颜色。
2.两线相交处出现背景颜色。
另外用刷新客户区的方法时,画线会有闪烁现象……

解决方案 »

  1.   

    在拖动时这个问题不好解决,我也找了很久,我想如果用PS中的图层技术应该可以实现
    不过你可以在拖动后记录起点终点,在ONDRAW中重绘一下
    至于闪烁就好办了,DOUBLE BUFFER
      

  2.   

    你在BAIDU上搜索下DrawClient这个程序,可以解决你的问题
      

  3.   

    先谢谢大家了,
    不知道windows附件->画图,那个程序时怎么实现画线这个功能的
      

  4.   

    参考了N多画线时橡皮筋技术,发现它们都是在纯背景(甚至是白色背景下实现的),我认为如果背景是图片的话SetROP2()无论用哪个模式都是有问题的!
    大概只有用双缓充才能实现!
    哪位朋友有这方面代码,看看……
      

  5.   

    别用什么橡皮筋了,直接一个后备缓冲就OK了,创建两个DC一个用作前景一个用做背景,所有的绘制都完成之后再Blt到用户窗口的DC上去,可以有效避免闪烁。