【VC++】003绘制连续线条-扇形线条

来源:互联网 发布:电脑科学上网软件 编辑:程序博客网 时间:2024/04/27 22:53

将作业处理完了...

在前面的基础上继续前行,前面画的是直线什么的,这次做的是连续线条,就像我们写字一样;

1.绘制连续线条

我们都了解线条的原理,不清楚请看【VC++】001绘制直线http://blog.csdn.net/xjm199/article/details/17486277

view依然以view结尾的,即C工程名View。。。

这次,我们在view类中添加一个BOOL型的私有成员变量m_bDraw,初始值是false;

当我们鼠标左键按下去后时,为true,当左键放开之后,为false,表示线条绘制结束。

部分定义代码:

//添加变量private:BOOL m_bDraw;
//构造函数时初始化m_bDraw = false;
//在OnLButtonDown中m_bDraw = true;
//在OnLButtonUp中m_bDraw = false;

重点是添加事件OnMouseMove,这样,就会绘出鼠标移动的轨迹了,即线条

        CClientDC dc(this);//CPen pen(PS_SOLID,1,RGB(255,0,0));//CPen *pOldPen=dc.SelectObject(&pen);if(m_bDraw==TRUE){//dc.SetROP2(R2_BLACK);dc.MoveTo(m_ptOrigin);dc.LineTo(point);m_ptOrigin=point;}//dc.SelectObject(pOldPen);

绘出效果:

如果想给线条加一些效果的话,比如给线条加上颜色,即之前所用CPen类,把上述代码的注释部分解开即可:

 

 

2.绘制扇形线条

我们在绘制连续线条的基础上,注释掉OnMouseMove里面的m_ptOrigin=point;//修改线条的起点的

CClientDC dc(this);CPen pen(PS_SOLID,1,RGB(255,0,0));CPen *pOldPen=dc.SelectObject(&pen);if(m_bDraw==TRUE){dc.MoveTo(m_ptOrigin);dc.LineTo(point);//m_ptOrigin=point;}dc.SelectObject(pOldPen);


就可以画出这么神奇的图形了...

m_ptOrigin是起始点,如果不变,就会以一个点不断画线;

我们可以看出上述的扇形的边缘并没有封口;

我们可以通过在View中新建CPoint类型的私有成员变量m_ptOld,并在OnLButtonDown中初始化;

private:CPoint m_ptOld;BOOL m_bDraw;CPoint m_ptOrigin;
void CDrawStraightView::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call defaultm_ptOld = point;m_bDraw = true;m_ptOrigin = point;CView::OnLButtonDown(nFlags, point);}


最后在OnMouseMove添加代码(//可以将之前的注释掉,或者在基础上增加dc.LineTo(m_ptOld)和m_ptOld=point;):

CClientDC dc(this);CPen pen(PS_SOLID,1,RGB(255,0,0));CPen *pOldPen=dc.SelectObject(&pen);if(m_bDraw==TRUE){//dc.SetROP2(R2_BLACK);dc.MoveTo(m_ptOrigin);dc.LineTo(point);dc.LineTo(m_ptOld);//修改线段起点//m_ptOrigin=point;m_ptOld=point;}dc.SelectObject(pOldPen);


效果如下:

 

好了,今天就这样了,后续更加精彩的给大家...

 

多多交流...o(∩_∩)o     初学者拜谢

3 0
原创粉丝点击