2013-03-21 26 views
0

我有一個項目用Glut完成大多數子窗口都有相同的行爲,除非不完全顯示相同的東西(圖片現在)。Glut:同樣的回調多個窗口,確定誰打電話

我想盡可能重用代碼,並決定使用每個事件的單個回調,由特定事件的所有窗口使用。

他們是否從回調內部確定哪個子窗口接收事件?

我們的目標是做這樣的事情(因爲一個指針指向一個成員方法是被禁止的):

MyWindow* window1; 
MyWindow* window2; 
MyWindow* window3; 

... 

void callbacksReshape(int w, int h) 
{ 
    if("window 1") 
     window1->reshape(int w, int h); 
    if("window 2") 
     window2->reshape(int w, int h); 
    if("window 3") 
     window3->reshape(int w, int h); 
} 

感謝所有爲你解答!

編輯:我知道關於glutGetWindow,問題是:在調用回調函數之前,Glut調用glutSetWindow

回答

0

我不知道glutGetWindow會給出正確的ID,但有點測試後,似乎工作(的Mac OSX 10.8.2和Fedora 3.4.6-2.fc17.x86_64):

void disp() 
{ return; } 

void idle() 
{ return; } 

void reshape(int w, int h) 
{ 
    GLuint id_fenetre = glutGetWindow(); 
    printf("%d has moved\n", id_fenetre); 
    return; 
} 

int main(int argc, char *argv[]) 
{ 
    glutInit(&argc, argv); 
    glutIdleFunc(idle); 

    GLuint id; 
    char *title = (char*)calloc(255, sizeof(char)); 

    for(int i = 0; i < 5; ++i) 
    { 
     GLuint id = glutCreateWindow(""); 
     sprintf(title, "%d", id); 
     glutSetWindow(id); 
     glutDisplayFunc(&disp); 
     glutReshapeFunc(&reshape); 
     glutSetWindowTitle(title); 

     printf("Window %d created", id); 
    } 

    glutMainLoop(); 
    return 0; 
} 

希望能幫助別人!