码迷,mamicode.com
首页 > 其他好文 > 详细

绘制扇形效果线条小Bug解决

时间:2016-12-24 11:27:16      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:技术分享   line   image   view   origin   com   todo   基本代码   ges   

绘制线条基本代码:

变量:

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)

}

 技术分享

 

 

绘制扇形效果线条小Bug解决

标签:技术分享   line   image   view   origin   com   todo   基本代码   ges   

原文地址:http://www.cnblogs.com/mxbs/p/6216830.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!