if(GetDlgCtrlID()==IDC_SPIN_D1)
{……m_spin_d1=(CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_D1);……}
if(GetDlgCtrlID()==IDC_SPIN_D2)
{……m_spin_d2=(CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_D2);……}
……
……
……
if(GetDlgCtrlID()==IDC_SPIN_D10)
{……m_spin_d10=(CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_D10);……}类似这一串的语句怎么用循环语句实现呢?
显然不能用数组实现的,要是比10更多怎么办的呢?

解决方案 »

  1.   

    可以用数组啊
    你也不用一个一个判断啊
    判断是IDC_SPIN_D1到IDC_SPIN_D10范围并连续就可以
      

  2.   

    CSpinObj *m_spin;
    m_spin = new CSpinObj[10];
    int nID = GetDlgCtrlID();
    if((nID>=IDC_SPIN_D1)||nID<=IDC_SPIN_D10))
      m_spin[nID-IDC_SPIN_D1] = (CSpinButtonCtrl*)GetDlgItem(nID)
      

  3.   

    #define IDC_SPIN_D1  IDC_NUM
    #define IDC_SPIN_D1  IDC_NUM+1
    ...
    #define IDC_SPIN_D10  IDC_NUM+9
      

  4.   


    非常感谢你的回答!
    但IDC_SPIN_D1到IDC_SPIN_D10 都是控件的ID,怎么个用数组法呢,烦请示例!不至于把资源号那些整数拿出来吧,那样程序以后就读不懂了。况且不是要求每个if都执行,只执行其中的一个而矣。希望能有办法将字符串转换成变量名就好了。
      

  5.   

    UINT nResID [] = {IDC_SPIN_D1,IDC_SPIN_D2,IDC_SPIN_D3,...};int nResCount = sizeof(nResID)/sizeof(UINT);CSpinButtonCtrl *pSpinCtrl[nResCount];
    pSpinCtrl[0] = &m_spin_d1;
    pSpinCtrl[1] = &m_spin_d2;
    pSpinCtrl[2] = &m_spin_d3;//...
    for(int i=0;i<nResCount;i++)
    {
    pSpinCtrl[i] = (CSpinButtonCtrl*)GetDlgItem(nResID[i]);
    }
      

  6.   

    要是全部赋值的话
    用个for循环就可以了
    for(int i=0;i<10;i++)
    {
      m_spin[i] = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_D1+i);
    }