Я делаю консольное приложение для платформ Unix и использую библиотеку curses (или ncurses )для обработки ввода с клавиатуры и мыши. Проблема в том, что я нашел очень мало документации о том, как именно его использовать для этого, за исключением этой страницы и этой , которые не имеют очень подробных примеров. Мне удалось зафиксировать левый щелчок, но я не могу заставить его работать для правого щелчка, потому что меню параметров эмулятора терминала появляется в месте расположения курсора, но событие не обрабатывается приложением. Как этого избежать и зафиксировать событие в приложении?
У меня есть следующая строка для настройки событий мыши:
// Set up mouse event throwing
mousemask(BUTTON1_PRESSED | BUTTON2_PRESSED, NULL);
И в методе, который обрабатывает ввод, у меня есть следующее:
int c = getch();
MEVENT event;
switch(c)
{
case KEY_UP:
... do stuff
break;
case KEY_DOWN:
... do stuff
break;
case KEY_MOUSE:
if(getmouse(&event) == OK)
{
if(event.bstate & BUTTON1_PRESSED) // This works for left-click
{
... do stuff
}
else if(event.bstate & BUTTON2_PRESSED) // This doesn't capture right-click
{
... do other stuff
}
else
fprintf(stderr, "Event: %i", event.bstate); // Doesn't print anything on right-click
}
break;
default:
return;
}
Я также пытался настроить mousemask()
с маской ALL_MOUSE_EVENTS
, но он по-прежнему не печатает никаких событий в последнем предложении else
, поэтому я полагаю, что событие просто не запускается. Любая помощь в этом будет высоко оценена.