0

私は過剰プログラミングの初心者です。ウィンドウを作成して、マウスの座標(ウィンドウ内)を表示したいだけです。(ウィンドウ内で)マウスのボタンを押し、カーソルがウィンドウの外にあるときに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;
}
4

1 に答える 1

1

はい、それは正しいように聞こえます。別の動作が必要な場合は、おそらくglutMouseFuncglutPassiveMotionFuncの組み合わせを使用する必要があります。

于 2012-09-15T01:37:27.860 に答える