Интересно, есть ли в NCurses такая вещь, как события движения мыши, и есть ли способ их поймать. Следуя Взаимодействию с мышью (из HOWTO по программированию в NCurses) кажется, что, включив бит 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
для события движения мыши?
Спасибо заранее!