我有一个用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 :(得分: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;
}
希望能帮助别人!