Переизбыток FreeGlutMotionFunc работает

Я новичок в программировании перенасыщения. Я хочу просто создать окно и показать координаты мыши (внутри окна). Это нормально, что glutMotionFunc активен, когда я нажимаю кнопку мыши (внутри окна) и курсор находится вне окна? Если не где я не прав? Я размещаю здесь код:

int lbuttonDown = 0;

void renderScene(void)          //esegue ogni volta che la finestra deve essere ridisegnata
{
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glutSwapBuffers();
}

void entrata_uscita (int state)
{
  if ((state==GLUT_ENTERED))
  {
 printf("DENTRO\n");//playback;  se va fuori continuo la riproduzione con i coefficienti attuali
  }
  else
  {printf("FUORI\n");}
 }

 void processMouseActiveMotion(int x, int y) 
 {
  printf("Mouse premuto mosso a x=%d e y=%d\n",x,y);
 }

 void processMousePassiveMotion(int x, int y)
 {
  printf("Mouse mosso a x=%d e y=%d\n",x,y);
 }

 void playback()
 {

 }

 void processMouse(int button, int state, int x, int y)
 {
 if ((state == GLUT_DOWN) && (button == GLUT_LEFT_BUTTON))
 {
   printf("Mouse premuto a x=%d e y=%d\n",x,y);
       lbuttonDown=1;
 }
 else
 {
   lbuttonDown=0;
 }  
 }

//Main program
int main(int argc, char **argv)
{
// init GLUT and create Window
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB );
glutInitWindowPosition(300,20);
 glutInitWindowSize(500,500);
glutCreateWindow("Variation");


// register callbacks
glutDisplayFunc(renderScene);
//quando l'applicazione è inattiva (nessun evento) (eseguire il suono)
glutIdleFunc(playback);
glutMouseFunc(processMouse);                        //Detecting Mouse Clicks
glutMotionFunc(processMouseActiveMotion);           //movimento con un pulsante premuto
glutPassiveMotionFunc(processMousePassiveMotion);   //movimento senza premere i tasti
glutEntryFunc(entrata_uscita);

// enter GLUT event processing cycle
glutMainLoop();
return 0;
}

person Luca90    schedule 02.08.2012    source источник


Ответы (1)


Да, звучит правильно. Если вам нужно другое поведение, вам, вероятно, следует использовать комбинацию glutMouseFunc и glutPassiveMotionFunc.

person aib    schedule 15.09.2012