想实现,是10个按钮按圆形排列。
下面是我自己写的一个函数,但有点问题,就是2和3,7和8是平行排列的
我是想没有平行的按钮,都是错开的,成一个圆形。
求高手帮我修改一下谢谢~~~~
const int NUM = 10;
const int FIRST_BUTTON_ID = 1000;
const double PI = 3.1415926;const int CENTER_X = 350;
const int CENTER_Y = 150;
const int RADIUS = 100;const int BUTTON_W = 50;
const int BUTTON_H = 20;
void CMiBaoDlg::IniNum()
{
CButton *pBn = NULL;
char strNum[MAX_PATH] = {0};
int iAngle = 0;
CRect rect;
int iOffsetAngle = 360 / NUM;
int iOffsetX = 0;
int iOffsetY = 0; for ( int iNum = 0; iNum < NUM; iNum++ )
{
pBn = new CButton;
sprintf_s( strNum, "%d", iNum ); memset( &rect, 0, sizeof(rect) );
rect.left = LONG(CENTER_X + RADIUS * cos(PI*iAngle/180) + iOffsetX);
rect.top = LONG(CENTER_Y + RADIUS * sin(PI*iAngle/180) + iOffsetY);
rect.right = rect.left + BUTTON_W;
rect.bottom = rect.top + BUTTON_H; int iID = FIRST_BUTTON_ID + iNum;
pBn->Create( strNum, WS_VISIBLE|WS_CHILD, rect, this, iID );
iAngle += iOffsetAngle; }
}
下面是我自己写的一个函数,但有点问题,就是2和3,7和8是平行排列的
我是想没有平行的按钮,都是错开的,成一个圆形。
求高手帮我修改一下谢谢~~~~
const int NUM = 10;
const int FIRST_BUTTON_ID = 1000;
const double PI = 3.1415926;const int CENTER_X = 350;
const int CENTER_Y = 150;
const int RADIUS = 100;const int BUTTON_W = 50;
const int BUTTON_H = 20;
void CMiBaoDlg::IniNum()
{
CButton *pBn = NULL;
char strNum[MAX_PATH] = {0};
int iAngle = 0;
CRect rect;
int iOffsetAngle = 360 / NUM;
int iOffsetX = 0;
int iOffsetY = 0; for ( int iNum = 0; iNum < NUM; iNum++ )
{
pBn = new CButton;
sprintf_s( strNum, "%d", iNum ); memset( &rect, 0, sizeof(rect) );
rect.left = LONG(CENTER_X + RADIUS * cos(PI*iAngle/180) + iOffsetX);
rect.top = LONG(CENTER_Y + RADIUS * sin(PI*iAngle/180) + iOffsetY);
rect.right = rect.left + BUTTON_W;
rect.bottom = rect.top + BUTTON_H; int iID = FIRST_BUTTON_ID + iNum;
pBn->Create( strNum, WS_VISIBLE|WS_CHILD, rect, this, iID );
iAngle += iOffsetAngle; }
}
这个角度d可以预先这样计算。
for(int iNum = 0; iNum < NUM; iNum++ )
{
iAngle += iOffsetAngle;
if(iAngle == 90)
{
d = 0;
break;
}
else if(iAngle > 90)
{
d = iAngle - 90;
break;
}
}
其实也就是0按钮用1按钮的坐标移动即可
但貌似没有移动的效果
为什么?
按钮必须是动态创建的!!!!
void CMiBaoDlg::OnBnClickedButton1()
{
for ( int i = 0; i < (int)m_vecButton.size(); i++ )
{
stBnCycle *pBnCycleFront = m_vecButton[i];
if ( NULL == pBnCycleFront )
continue;
CButton *pBnFront = pBnCycleFront->m_pBn;
if ( NULL == pBnFront )
continue; if ( i == 9 )
i = -1;
stBnCycle *pBnCycleBack = m_vecButton[i+1];
if ( NULL == pBnCycleBack )
continue;
CRect rtBack = pBnCycleBack->m_rectBn;
pBnFront->MoveWindow( rtBack );
}
}