0

ほとんどのサブウィンドウが同じ動作をするGlutでプロジェクトを完了しましたが、まったく同じものを表示しないことを除いて(今のところ画像)。

可能な限りコードを再利用したいので、特定のイベントのすべてのウィンドウで使用される、イベントごとに 1 つのコールバックを使用することにしました。

コールバック内から、どのサブウィンドウがイベントを受信したかを判断する方法はありますか?

目標は、次のようなことです (メンバー メソッドへのポインターは禁止されているため)。

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

回答ありがとうございます。

EDIT:私は知っていますglutGetWindow、質問は:glutSetWindowコールバック関数を呼び出す前にGlut呼び出しを行いますか。

4

1 に答える 1

0

正しい ID を提供するかどうかはわかりませんでしglutGetWindowたが、少しテストした後、動作するようです (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 に答える