vb bitbltt后 鼠标位置一条神奇的横白线,该怎么解决

怎么实现画图软件中的“按下鼠标左键后移动鼠标,生成随鼠标位置变化的直线,而松开鼠标左键后,直线不再变化。” - VC/MFC当前位置:& &&&怎么实现画图软件中的“按下鼠标左键后移动鼠标,生怎么实现画图软件中的“按下鼠标左键后移动鼠标,生成随鼠标位置变化的直线,而松开鼠标左键后,直线不再变化。”&&网友分享于:&&浏览:71次如何实现画图软件中的“按下鼠标左键后移动鼠标,生成随鼠标位置变化的直线,而松开鼠标左键后,直线不再变化。”第一次发帖,描述问题有点啰嗦,不过大家肯定也明白什么意思。
我不太清楚在&onMouseMove的响应函数里面应该怎么写,因为只要LineTo,那么生成的直线就不能删除了。------解决方案--------------------参考“直线绘制和交点”0分
http://download.csdn.net/detail/schlafenhamster/5704889
“通过鼠标&画线,并计算直线的交点。可以&点击直线,即删除它”------解决方案--------------------因为只要LineTo,那么生成的直线就不能删除了。
==========
用底色再画一次?------解决方案--------------------添加处理WM_LBUTTONDOWN/WM_LBUTTOONUP/WM_MOUSEMOVE消息。WM_LBUTTONDOWN中记录起点和设置标记,WM_MOUSEMOVE记录终点,OnPaint/OnDraw()根据标记绘制直线,WM_LBUTTONUP重置标记。------解决方案--------------------程序橡皮筋绘图程序的使用实例:编辑void&CXXXView::OnMouseMove(UINT&nFlags,&CPoint&point)
//&按下左键移动开始画图
if&(nFlags&==&MK_LBUTTON)
//&创建画笔RGB(0x00,&0x00,&0xFF)
HPEN&hPen&=&::CreatePen(PS_SOLID,&m_PenWidth,&RGB(0x00,&0x00,&0xFF));
//&使用画笔
::SelectObject(m_hMemDC,&hPen);
//设置系统色彩模式取反色
int&oldRop=::SetROP2(m_hMemDC,R2_NOTXORPEN);&
::MoveToEx(m_hMemDC,m_pOrigin.x,m_pOrigin.y,&NULL);
::LineTo(m_hMemDC,&m_pPrev.x,m_pPrev.y);
//恢复系统默认色彩模式
::SetROP2(m_hMemDC,oldRop);
::MoveToEx(m_hMemDC,&m_pOrigin.x,&m_pOrigin.y,&NULL);
::LineTo(m_hMemDC,&point.x,&point.y);
m_pPrev&=&
Invalidate(FALSE);
}------解决方案--------------------用到三个消息,&WM_LBUTTONDWN,&WM_MOVEMOVE,&WM_LBUTTONUP.
在WM_LBUTTONDOWN&时,记录绘图起点.
在WM_MOUSEMOVE&时,&我能提供两个办法:&
&&&&&&1,&第一条线直接绘,&绘第二条线前,&用&R2_NOTXORPEN&再擦掉第一条线.
&&&&&&2,&将背景(包含先前绘的图形)先保存在另一张DC中,&在绘线前,用BITBLT恢复先前的背景,&再画线.
&&&&&&建议用第二种方法.
在WM_LBUTTONUP&时,&
&&&&&&如果用第一种方法,&什么都不用做,&把最张线条画出来就行了.
&&&&&&如是用第二种方法,&将线条画出来后,&保存到另一张DC中.&以便画下个图形.
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 bitblt stretchblt 的文章

 

随机推荐