先看效果图
首先要找到不同等分数圆上等分点
滑动条的数值即为等分数,滑动条的关联变量为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是用来上下、左右移动创建的变量。
这里只写了万花筒等分的做法,还有很多功能没有贴上代码,包括画笔画出任意线条等,待更新…