如何在鼠标移动中画线(像画图程序中的一样)

better0332 2007-06-11 09:27:27
我在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.两线相交处出现背景颜色。
另外用刷新客户区的方法时,画线会有闪烁现象……
...全文
692 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sandy_zc_1 2007-06-14
  • 打赏
  • 举报
回复
别用什么橡皮筋了,直接一个后备缓冲就OK了,创建两个DC一个用作前景一个用做背景,所有的绘制都完成之后再Blt到用户窗口的DC上去,可以有效避免闪烁。
better0332 2007-06-13
  • 打赏
  • 举报
回复
参考了N多画线时橡皮筋技术,发现它们都是在纯背景(甚至是白色背景下实现的),我认为如果背景是图片的话SetROP2()无论用哪个模式都是有问题的!
大概只有用双缓充才能实现!
哪位朋友有这方面代码,看看……
better0332 2007-06-13
  • 打赏
  • 举报
回复
顶一下
lyg_zy 2007-06-12
  • 打赏
  • 举报
回复
双缓充 加 局部刷新技术 可以非常好的解决你的问题。
tracing 2007-06-12
  • 打赏
  • 举报
回复
你在BAIDU上搜索下DrawClient这个程序,可以解决你的问题
better0332 2007-06-12
  • 打赏
  • 举报
回复
先谢谢大家了,
不知道windows附件->画图,那个程序时怎么实现画线这个功能的
  • 打赏
  • 举报
回复
拖动时,用MouseMove可以不?
「已注销」 2007-06-11
  • 打赏
  • 举报
回复
在拖动时这个问题不好解决,我也找了很久,我想如果用PS中的图层技术应该可以实现
不过你可以在拖动后记录起点终点,在ONDRAW中重绘一下
至于闪烁就好办了,DOUBLE BUFFER

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧