2014-01-20 3 views
1

Привет! Я пытаюсь написать программу, где мне нужно сообщить о положении каждого движения мыши. Я вызвал функцию XSelectInput() с маской PointerMotionMask. Кажется, что все работает нормально, но цифры после печати не появляются после каждого движения, они появляются в блоках, а номера в event.xmotion.x и event.xmotion.y очень высоки, в сто тысяч.
Что вызывает эти большие числа?
Также моя программа получает каждое число и сообщает об этом немедленно или хранится в очереди и отправляется блоками на терминал?
Благодаряуказатель движения. почему цифры настолько высоки? почему он печатает информацию в блоках, а не постоянный поток?

Вот мой цикл событий:

while(1) 
    { 
     XNextEvent(display, &event); 
     switch (event.type) 
     { 
      case Expose: 
       glClearColor(1.0, 1.0, 0.0, 1.0); 
        glClear(GL_COLOR_BUFFER_BIT); 
        glFlush(); 
        glXSwapBuffers(display, glxwin);    
       break; 
      case MotionNotify: 
       printf("%d, %d", event.xmotion.x, event.xmotion.y); 
       break; 
      case ButtonPress: exit(1); 
      default: break;  
     } 
    } 
+0

Попробуйте добавить '\ n' в ваш printf для буферизации. (Не знаю о системе координат, хотя.) – Mat

+0

не дублируйте вопросы (вы могли бы просто отредактировать предыдущий) – prajmus

+0

kk не знал, что – sandbucket

ответ

0

Помимо печати новой строки в конце концов, вы могли бы также сделать '\r' в конце концов, он будет переместить курсор в начало существующей линии, поэтому он будет просто печатать над собой каждый раз. Чтобы сделать эту работу лучше, измените форматирование цифр на фиксированный размер, например:

printf("%4d, %4d \r", event.xmotion.x, event.xmotion.y); 
fflush(stdout) ;