设为首页 加入收藏

TOP

[VC++]003绘制连续线条-扇形线条
2014-11-23 18:54:24 】 浏览:3921
Tags:003 绘制 连续 线条 扇形

将作业处理完了...

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

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

data-cke-saved-src=https://www.cppentry.com/upload_files/article/55/1_8ne13__.jpg

这次,我们在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);

绘出效果:

data-cke-saved-src=https://www.cppentry.com/upload_files/article/55/1_9de46__.jpg

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

data-cke-saved-src=https://www.cppentry.com/upload_files/article/55/1_5tof2__.jpg

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);


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

data-cke-saved-src=https://www.cppentry.com/upload_files/article/55/1_ybryc__.jpg

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 default
	m_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);


效果如下:

data-cke-saved-src=https://www.cppentry.com/upload_files/article/55/1_zs6pl__.jpg

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

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

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VC++函数调用过程汇编分析(基于v.. 下一篇VC 判断选中的 单选框 复选框的

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目