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是用来上下、左右移动创建的变量。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值