Использование ncurses для захвата щелчков мышью в консольном приложении

Я делаю консольное приложение для платформ 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, поэтому я полагаю, что событие просто не запускается. Любая помощь в этом будет высоко оценена.

9
задан Lightness Races with Monica 18 November 2016 в 16:36
поделиться