Интересно, есть ли такая вещь, как события перемещения мыши в NCurses, и есть ли способ их отловить? После взаимодействия с мышью (из NCurses, программирующего HOWTO ) кажется, что, включив бит REPORT_MOUSE_POSITION
в вызове к mousemask
, можно действительно отловить события движения мыши .
Итак, я попробовал это, и это, кажется, не работает. У меня есть что-то вроде этого:
int ch, count=0;
mmask_t old;
initscr ();
noecho ();
cbreak ();
mousemask (ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION, &old);
keypad (stdscr, TRUE);
while ((ch = getchar ()) != 'q')
{
count++;
if (ch == KEY_MOUSE)
{
MEVENT event;
assert (getmouse (&event) == OK);
mvprintw (0, 0, "Mouse Event!\n");
}
mvprintw (1, 1, "Event number %4d",count);
}
...
Я ожидал, что при перемещении курсора мыши счетчик событий будет увеличиваться. Но это не так. Я также попытался переместить его, когда кнопка мыши 1 нажата, чтобы увидеть, генерирует ли «перетаскивание» события, и он также ничего не сделал. Вопрос, если это просто проблема моего эмулятора терминала? Или, может быть, я неправильно понимаю, что NCurses считает событиями перемещения мыши? Все остальные события мыши были получены (и я могу управлять программами в консоли, которые используют мышь).
Я пробовал gnome-терминал, xterm и некоторые другие вещи. Я также попробовал текстовую среду (без X), зайдя в tty моего linux-компьютера (Fedora 15, Ctrl + Alt + F2), и это не сработало.
Наконец, если я правильно понял, и об этих событиях нужно сообщить, каково поле bstate
поля MEVENT
для движения мыши?
Заранее большое спасибо!