0

我有一个使用 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,问题是:glutSetWindow在调用回调函数之前是否会调用 Glut。

4

1 回答 1

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;
}

希望对某人有所帮助!

于 2013-03-22T14:33:53.793 回答