使用opengl进行鼠标操作调用glutMouseFunc(mouse);glutMotionFunc(motion);等函数编译问题???

时间:2021-11-30 17:07:49
VC开发opengl应用程序时
程序代码为:
void CCooperateCADView::motion(int x, int y)
{
if(mouse_button_pressed)
{
theta -= y-mouse_y; //根据鼠标器的移动改变旋转的纬度
if(theta<0) theta = 0; //限制纬度在0到180度之间
if(theta>180) theta = 180;

phi += x-mouse_x; //根据鼠标器的移动改变旋转的经度
if(phi<0) phi+=360; //限制经度在0到360度之间
if(phi>360) phi-=360;

mouse_x = x; //更新记录的鼠标器位置
mouse_y = y;

glutPostRedisplay();
//通知系统:窗口需要刷新
}
}
//鼠标按钮回调函数
void CCooperateCADView::mouse(int button, int state, int x, int y)
{
if(button == GLUT_LEFT_BUTTON)
    {
        if(state == GLUT_DOWN)
            //如果鼠标器左键按下,mouse_button_pressed置位
            //并记录光标位置
        {
            mouse_button_pressed = true;
            mouse_x = x;
            mouse_y = y;
        }
        else
        {
            mouse_button_pressed = false;
        }
    }
}

void CCooperateCADView::OnTest() 
{
...
         glutDisplayFunc (display);
//设置窗口刷新的回调函数
glutMouseFunc(mouse);
//设置鼠标器按键回调函数
glutMotionFunc(motion);
//设置鼠标器移动回调函数
glutReshapeFunc(reshape);
//设置窗口伸缩的回调函数
glutKeyboardFunc(keyboard);
//设置键盘回调函数
}
出现:
F:\CooperateCAD\CooperateCADView.cpp(836) : error C2664: 'glutMouseFunc' : cannot convert parameter 1 from 'void (int,int,int,int)' to 'void (__cdecl *)(int,int,int,int)'
        None of the functions with this name in scope match the target type
F:\CooperateCAD\CooperateCADView.cpp(838) : error C2664: 'glutMotionFunc' : cannot convert parameter 1 from 'void (int,int)' to 'void (__cdecl *)(int,int)'
        None of the functions with this name in scope match the target type
F:\CooperateCAD\CooperateCADView.cpp(840) : error C2664: 'glutReshapeFunc' : cannot convert parameter 1 from 'void (int,int)' to 'void (__cdecl *)(int,int)'
        None of the functions with this name in scope match the target type
等错误请教各位高人,如何解决,谢谢!

1 个解决方案

#1


你既然用MFC做窗口,就没有必要用glut了。glut只是简化了一些窗口功能。

你的mouse函数不是简单的函数,而是的成员函数。

#1


你既然用MFC做窗口,就没有必要用glut了。glut只是简化了一些窗口功能。

你的mouse函数不是简单的函数,而是的成员函数。