我定义了几个数据:
#define ID_1    1
#define ID_2    2
#define ID_3    3
#define ID_4    4
 .
 .
 .
#define ID_10   10如何用循环的方式取出ID?
for(int i=0;i<10;i++)
{
   printf("%d",ID_i);
}
我用了一个展开的宏
#define GET_ID(x) ID_(x)
可是可是提示错误:ID_不存在。

解决方案 »

  1.   

    我用10个EDIT,
    每个EDIT 的ID 如上所显。
    CEdit *pEdit;
    pEdit=(CEdit*)GetDlgItem(ID_1);
    pEdit->EnableWindow(false);
    如果10个EDIT的ID不连续。那么我就要写10个这样的东西。所以我想用一个循环来完成。
      

  2.   

    我用10个EDIT,
    每个EDIT 的ID 如上所显。
    CEdit *pEdit;
    pEdit=(CEdit*)GetDlgItem(ID_1);
    pEdit->EnableWindow(false);
    如果10个EDIT的ID不连续。那么我就要写10个这样的东西。
    ===========================
    简单:
    CEdit *pEdit;
    for(int i= ID_1;i<=ID_10;i++)
    {
    pEdit=(CEdit*)GetDlgItem(i);
    pEdit->EnableWindow(false);
    }
    上面一定OK!
      

  3.   

    ID_1为第一个Edit控件的ID,ID_10为第十个Edit控件的ID,这十个Edit控件的ID要是连续的,如果不是的,可以在Resource.h中修改,注意修改以后的ID不能和已经存在的其他资源的ID冲突。
      

  4.   

    那就把这10个EDIT的ID改成连续的噻。
      

  5.   

    #define GetID(x)  x == 0 ?ID_1 : (x == 1 ? ID_2 : (x == 2 ? ...))
      

  6.   

    #define GetID(x)  x == 0 ? ID_1 : (x == 1 ? ID_2 : (x == 2 ? ...))
      

  7.   

    #define ID(i) ID_##i
    不行的,i不会展开,得到的结果是ID_i
      

  8.   

    是可以按楼上的那么定义,但是如我所说“宏只是在编译的时候有用,它在编译过后就被替换掉了。运行的时候无法动态的识别、处理之!”,所以如果是使用这样的语句来处理,是不行的。
    CEdit *pEdit;
    for(int i= 0; i<10; i++)
    {
    pEdit=(CEdit*)GetDlgItem(ID(i));
    pEdit->EnableWindow(false);
    }
    上面的语句是不能编译通过的!
      

  9.   

    1、用枚举,
    enum{
    ID_1 = 1,
    ID_2 = 2,
    ...
    }
    2、用一个临时变量int nCtrlID
    for(int nCtrlID = ID_1; nCtrlID ++; nCtrlID <= ID_10)
    {
    ...
    }
    3、直接修改Resource.h文件
    将所有的控件ID改成连续增加的值,注意不要和其他同一界面下的控件ID重复
    比如:
    #define IDC_EDIT1  1001
    #define IDC_EDIT2  1002
    #define IDC_EDIT3  1003
    ...
    #define IDC_EDIT10  1010
    不过还是要一个临时变量
    for(int nID = IDC_EDIT1;nID++;nID<=IDC_EDIT10;)
    {
    ...
    }
      

  10.   

    上面有手误:
    for(int nCtrlID = ID_1; nCtrlID <= ID_10;nCtrlID ++)
    ...
    for(int nID = IDC_EDIT1;nID<=IDC_EDIT10;nID++;)
    ...
      

  11.   

    vcleaner兄,你说的是我的答案还是 pinel兄弟的?
      

  12.   

    vcleaner兄,你说的是我的答案还是 pinel兄弟的?
    ========================
    当然是pinel兄弟的。你的那种方法是可以实现。
      

  13.   

    vcleaner 的办法是最常用的也是最好的办法,补充一点是若i还有其它用途,可以改为i由0循环到9,调用时用ID_01+i。当然,若考虑到ID不定连续为便于扩展,需要多做一些工作,如使用枚举,或者使用STL或MFC的map,对ID做个转换。
      

  14.   

    1.pomelowu(羽战士) 
    #define GetID(x) x == 0 ? ID_1 : (x == 1 ? ID_2 : (x == 2 ? ...))2.baby2003627(梦想) 
    定义一个结构体,把东西都放里面,然后再调用!!3.vcleaner(??.......) 
    ID_1为第一个Edit控件的ID,ID_10为第十个Edit控件的ID,这十个Edit控件的ID要是连续的,如果不是的,可以在Resource.h中修改,注意修改以后的ID不能和已经存在的其他资源的ID冲突。
    -----------------------------------------------------
    以上都行!
    谢谢大家的思路。