2014-12-03 43 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