绘制扇形效果线条小Bug解决
Posted 大道至简-giserDev
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了绘制扇形效果线条小Bug解决相关的知识,希望对你有一定的参考价值。
绘制线条基本代码:
变量:
CPoint m_ptOrigin;//起点坐标
bool m_bTrue;//检查鼠标左键是否按下
CPoint m_ptOldOrigin;//记录上一次绘制终点坐标,用于绘制边界线
初始化:
m_ptOrigin = 0;
m_bTrue = false;
m_ptOldOrigin = 0;
代码实现:
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_ptOrigin = point;//每一次鼠标按下时都将当前位置设置为起点
m_bTrue = true;
CView::OnLButtonDown(nFlags, point)
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_bTrue = false;
CView::OnLButtonUp(nFlags, point);
}
void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
//创建一个红色的、宽度为1的实线画笔
CPen pen(PS_SOLID,1,RGB(255,0,0));
//把创建的画笔选入设备描述表
CPen *pOldPen = dc.SelectObject(&pen);
if(m_bTrue == true)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.LineTo(m_ptOldOrigin);
//m_ptOrigin = point;
m_ptOldOrigin = point;
}
//恢复设备描述表
dc.SelectObject(pOldPen);
CView::OnMouseMove(nFlags, point);
}
效果如图所示:
问题在于:绘制扇形前总是会绘制一条线,如果我想绘制两个扇形,当前扇形总是会在绘制新的扇形前绘制一条线,如第一个扇形与坐标原点之间就有一条线,问题出在哪里呢?
运行效果表明,我用于绘制边界线的起点坐标变量保留了原始坐标值(或上一次绘制结束时的坐标),因此,我们在每次绘制之前需要初始化鼠标按下时的坐标为绘制边界线的起点坐标。
这样当我绘制一个多个扇形时就不会出现线条了。
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_ptOrigin = point;//每一次鼠标按下时都将当前位置设置为起点
// m_ptOldOrigin = point;
m_bTrue = true;
CView::OnLButtonDown(nFlags, point)
}
如果有疑问,可以联系giserdev@163.com,更多内容请参考:http://www.cnblogs.com/mxbs/,技术交流请加QQ群:586571286。
以上是关于绘制扇形效果线条小Bug解决的主要内容,如果未能解决你的问题,请参考以下文章