我的窗体中有3个按钮,ID_BUTTON1  ID_BUTTON2  ID_BUTTON3
我如何通过一个循环for(int i=1;i<=3;i++){
}实现对这三个按钮的进行某一项相同行为的操作?我曾想这么做:
CString ItemCap;
for(int i=1;i<4;i++)
{
ItemCap.Format ("IDC_BUTTON%d",i);
         GetDlgItem(ItemCap)->MoveWindow(100,i*10,100+20,i*10+20);
}
可这样实行不通的。

解决方案 »

  1.   

    HWND hButton[4] ;
    hButton[0] = GetDlgItem(...) ;
    hButton[1] = GetDlgItem(...) ;for(int i=1;i<4;i++)
    {
        ::MoveWindow(hButton[i], 100,i*10,100+20,i*10+20);
    }
      

  2.   

    谢谢: rtdb(东临碣石) 我还想问一下,在vc中有没有类似于vb控件数组这样定义若干个相同控件的方法~?
    这样就可以
    for(int i=1;i<4;i++)
    {
        控件(i).MoveWindow(hButton[i], 100,i*10,100+20,i*10+20);
    }
      

  3.   

    若是在对话框中定义, 你可以手工将其ID有序排列,
    那么GetDlgItem()就可以在循环中实现了。若是在程序中创建, 可直接将其WINDOWS句柄保存在数组中。没有VB的那种控件数组。
      

  4.   

    "若是在对话框中定义, 你可以手工将其ID有序排列,
    那么GetDlgItem()就可以在循环中实现了。"小第愚笨,能否举例说明一下,谢谢~
      

  5.   

    ~~~>.<~~~~   哪位高手能再帮我举个例子?~
      

  6.   

    const int nCount = 3;
    int nArrID[nCount] = {IDC_BUTTON1,IDC_BUTTON2,IDC_BUTTON3};
    for(int i = 0;i< nCount;i++)
    {
    GetDlgItem(nArrID[i])->MoveWindow(100,i*10,100+20,i*10+20);
    }
    GetDlgItem的参数要求是int的,你传给它CString当然不行了。你的那几个控件的
    ID要是都是连续的,你也可以直接写
    假如IDC_BUTTON1 = 1001,IDC_BUTTON2 = 1002,IDC_BUTTON3 = 1003,for(int i = 1001;i< 1004;i++)
    {
    GetDlgItem(i)->MoveWindow(100,i*10,100+20,i*10+20);
    }
    不过不建议这么写