Почему бы не изменить состояние клавиш-модификаторов, как ожидается во время операций перемещения мыши?

Хотите знать, если кто-то еще имеет эту проблему. При использовании виртуальной машины Windows 10 в Parallels 11 на El Capitan кажется, что вы не можете проверить клавиши-модификаторы, если вы находитесь в событии Mouse с нажатой клавишей мыши.

Я наблюдаю, если мышь в данный момент не работает, Parallels отправляет / сохраняет изменения клавиши-модификатора только тогда, когда кнопка мыши или другая, немодифицирующая клавиша клавиатуры изменяет состояние (или другая клавиша-модификатор отпускается, но не при нажатии).

Итак... кто-нибудь знает, как обойти это? Мы определенно хотим поддержать Parallels. (Я также подал ошибку с ними об этом, потому что это определенно кажется неправильным.)

Вот код Просто создайте новый проект и вставьте его в код основного окна.

bool isDragging;

protected override void OnMouseDown(MouseButtonEventArgs e)
{
    if(e.ClickCount == 1 && e.ChangedButton == MouseButton.Left)
    {
        e.Handled = true;
        isDragging = true;
        CaptureMouse();
    }
    base.OnMouseDown(e);
}

protected override void OnMouseMove(MouseEventArgs e)
{
    if(isDragging)
    {
        e.Handled = true;
        Title = "Pressed: " + (Keyboard.Modifiers == ModifierKeys.Shift);
    }
    base.OnMouseMove(e);
}

protected override void OnMouseUp(MouseButtonEventArgs e)
{
    if(isDragging && e.ChangedButton == MouseButton.Left)
    {
        e.Handled = true;
        isDragging = false;
        ReleaseMouseCapture();
    }
    base.OnMouseUp(e);
}

1 ответ

Решение

Aaaaah! Задача решена! Это не ошибка как таковая, но она вызвана Parallels и должна быть явно включена.

В частности, вы должны изменить настройку клавиатуры на "Оптимизация для игр". Это говорит Parallels о том, чтобы быть более подробным с ключевыми уведомлениями.

Почему они решили назвать это "Оптимизация для игр" вместо чего-то более информативного или, по крайней мере, лучше объяснили, что делает эта функция, мне неведомо. Дни тестирования и пробного обхода, за которым следовал отчет об ошибках, поданный в Parallels, только чтобы выяснить, можно ли его контролировать с помощью настроек. И это от меня, архитектор программного обеспечения. Я даже не представляю, через что здесь пойдет не технарь. Действительно плохой звонок со стороны Parallels.

Другие вопросы по тегам