REPORT_MOUSE_POSITION для ncurses в Windows - PullRequest
0 голосов
/ 28 августа 2018

Возникают проблемы с постоянным чтением позиции мыши из простой оболочки c # вокруг сборки ncurses Томаса Дики для Windows здесь , я могу вызвать большую часть API без каких-либо проблем.

Однако я не могу прочитать положение мыши, кроме случаев, когда происходит соответствующее событие щелчка. Мой код сильно зависит от реализации, но основной цикл моего быстрого и грязного тестового приложения выглядит следующим образом (очевидно, NC - это моя оболочка со многими статическими методами):

var eventMask =
    NCMouse.BUTTON1_CLICKED |
    NCMouse.BUTTON2_CLICKED |
    NCMouse.REPORT_MOUSE_POSITION;

NC.MouseMask(eventMask, out uint old);

while(true)
{
    int c = NC.GetChar();
    if(c == NCKey.MOUSE)
    {
        NC.GetMouse(out MouseEvent mouse);
        NC.MoveAddString(3, 0, $"{mouse.x}.  {mouse.y}");
    }
    else 
    if (c != -1)
    {
        break;
    }

    NC.Move(NC.Lines - 1, NC.Columns - 1);
    NC.Refresh();
}

Прочитав о * nix решениях, я подозреваю, что мне может понадобиться какая-то переменная окружения, хотя я также видел комментарии разработчиков C, в которых говорилось, что им нужно printf("\0cc[?1003h\n"), чтобы включить отчет о положении мыши, а затем отключить его перед выходом с помощью похожая последовательность. Я полагаю, мне нужно было бы подключиться к библиотеке DLL msvcrt, чтобы попробовать это (я не ожидал, что .NET Console.Write сработает, и это не сработало).

1 Ответ

0 голосов
/ 28 августа 2018

Консольный драйвер Windows (который поддерживается всеми этими двоичными файлами) не использует escape-последовательности. Кстати, вы можете включить трассировку, установив переменную окружения NCURSES_TRACE.

...