MFC绘制万花筒等分圆(VS2013)

先看效果图

在这里插入图片描述

首先要找到不同等分数圆上等分点

滑动条的数值即为等分数,滑动条的关联变量为m_sliderctrl2
添加响应函数OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
函数中添加:

// TODO:  在此添加消息处理程序代码和/或调用默认值
	
	dengfen = m_sliderctrl2.GetPos();//获取等分数	
	for(int i = 0; i < dengfen; i++)
	{
		jiaodu[i] = (float)(i * 360 / dengfen);
	}
	for (int i = 0; i < dengfen; i++)
	{
		heng[i] = (float)(140+r/2)*cos((float)jiaodu[i] * PI / 180);
		zong[i] = (float)(140+r/2)*sin((float)jiaodu[i] * PI / 180);
	}

	InvalidateRect(NULL);
	Invalidate(FALSE);
	UpdateWindow();
	CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);

这里是获得等分数,求等分点相对于圆心的横纵偏移量,这里我的圆半径是140,根据不同情况请自行修改半径值

在OnPaint()函数中添加语句

画出万花筒效果:

int n = m_sliderctrl2.GetPos();
			for (int j = 0; j < 10; j++){
				for (int i = 0; i < n; i++)
				{
					dc->MoveTo(440 + hengp + heng[j], 160 + zongp + zong[j]);
					dc->LineTo(440 + hengp + heng[i], 160 + zong[i] + zongp);
				}
			}

这里440,160是我的圆心的位置,hengp,zongp是用来上下、左右移动创建的变量。

这里只写了万花筒等分的做法,还有很多功能没有贴上代码,包括画笔画出任意线条等,待更新…

猜你喜欢

转载自blog.csdn.net/weixin_42189863/article/details/85018184