2014-12-03 56 views
0

所以,我的菜单看起来像这样:变量在子菜单文本,GLUT

typedef struct menuItemStruct { 

    char* item; 

    char val; 

} menuItemStruct; 

static menuItemStruct menu1[] = { 
       {"Switch on/off", '1'}, 
       {"Accelerate",  '2'}, 
       {"Decelerate",  '3'}, 
       {"Widen the arc", '4'}, 
       {"Narrow the arc", '5'} 
}; 

int numItensMenu1 = sizeof(menu1)/sizeof(menuItemStruct); 

这是我的createMenus:

void criarMenus(void) 
{ 
    int pend; 
    int disp; 
    int mainmenu; 

    int i; 
    int j; 

    pend=glutCreateMenu(myMenuEsq); 

    for(i=0; i<numItensMenu1; i++) 
    { 
     glutAddMenuEntry(menu1[i].item, i); 
    } 

    disp=glutCreateMenu(myMenuDir); 

    for(i=0; i<numItensMenu2; i++) 
    { 
     glutAddMenuEntry(menu2[i].item, i); 
    } 
    mainmenu = glutCreateMenu(myMenuEsq); 
    glutAddSubMenu("Pendulum 1", pend); 
    glutAddSubMenu("Display", disp); 

    glutAttachMenu(GLUT_RIGHT_BUTTON); 

} 

What I achieve is that

的事情,然而,就是数摆是一个变量,从1到10,所以我希望我的月亮能够显示摆1,摆2等,并且每个摆显示一个子菜单,包括那些你可以看到的子菜单。然而,当我提到这条线时,我输了:

glutAddSubMenu("Pendulum 1", pend); 

我可以用变量替换“1”吗?例如像这样:

glutAddSubMenu("Pendulum %i", pendulumNumber, pend); 

或者我必须用ifs手动执行所有这些操作吗?如果我能做到这一点,怎么样?因为上述不起作用,显然。

回答

0

假设C,那么你可以使用的snprintf构建字符串:

char menuName[100]; 
for(int pendulumNumber=1; pendulumNumber<= 10;pendulumNumber++){ 
    snprintf(menuName, 100, "Pendulum %i", pendulumNumber); 
    glutAddSubMenu(menuName, pend); 
} 
+0

我无法检查它肯定的那一刻,因为我没有做摆安置尚未完成,但听起来loike一个好主意,没有想到建立一个字符串,我会按照你的建议,谢谢。 – Sheenah 2014-12-03 14:32:07

+0

嘿,虽然有这个问题,即使我在菜单中添加更多的项目,子菜单仍然返回相同的值,我不能分配不同的操作。有什么想法呢? – Sheenah 2014-12-03 20:16:04

+0

在循环中创建子菜单 – 2014-12-03 21:29:32