Win7 GLUT窗口不接收事件

时间:2011-03-09 19:06:46

标签: c++ opengl glut

我使用GLUT和OpenGL创建了一个简单的Visual Studio Express 2010 C ++项目, 它编译并运行正常,但它创建的窗口没有收到任何事件。 关闭/最小化按钮不执行任何操作(甚至没有鼠标悬停)右键单击任务栏上的任何上下文菜单,如果部分覆盖,则单击时窗口不会到达前景。

项目设置为控制台应用程序,我可以通过关闭控制台来关闭程序。

我主要有这个:

int main(int argc, char** argv) 
{
    glutInit(&argc, argv);
    glutInitWindowSize(window_width, window_height);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    glutCreateWindow("MyApp");
    glutIdleFunc(main_loop_function);


    GLenum err = glewInit();
    if (GLEW_OK != err)
    {
      /* Problem: glewInit failed, something is seriously wrong. */
      fprintf(stderr, "Error: %s\n", glewGetErrorString(err));

    }
    if (GLEW_VERSION_1_3)
    {
      fprintf(stdout, "OpenGL 1.3 is supported \n");
    }
    fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));



    GL_Setup(window_width, window_height);
    glutMainLoop();
}

1 个答案:

答案 0 :(得分:1)

您错过了显示回调。你能尝试一下:

void display();

int main(int argc, char** argv) 
{
    glutInit(&argc, argv);
    glutInitWindowSize(window_width, window_height);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    glutCreateWindow("MyApp");
    /// glutIdleFunc(main_loop_function);
    glutDisplayFunc(display);

    // ...

    glutMainLoop();
}

void display(){
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glutSwapBuffers();
}

另外,如果你有效地在函数内部循环,你的空闲函数似乎很糟糕。 Glut是面向回调的。您不需要创建循环,而是依赖空闲,鼠标,键盘,显示和调整大小回调。如果你不这样做,你将会错过窗口管理器事件。

编辑:

如果要创建动画,可以使用:

glutIdleFunc(idleFunc);

void idleFunc(){
    glutPostRedisplay();
}