Как запросить продолжительность двойного нажатия из Windows приложений UWP? - PullRequest
1 голос
/ 26 мая 2020

В моем приложении Windows UWP у меня есть компонент, который реагирует на двойное касание. Я реализовал это, отреагировав на событие PointerPressed файла CoreIndependentInputSource. В обработчике событий я получил следующий код:

if((e->CurrentPoint->Timestamp - _lastTimestamp) < _doubleClickDuration)
{
  Dispatcher->RunAsync(CoreDispatcherPriority::Normal, ref new DispatchedHandler([this]()
  {
    // Do whatever needs to be done on double-taps
  }));
}

_lastTimestamp = e->CurrentPoint->Timestamp;

_doubleClickDuration - это переменная, определяющая продолжительность двойного нажатия.

Код работает, как ожидалось, но проблема в том, что Я столкнулся с тем, что мне нужно установить _doubleClickDuration на «разумное» значение. То, что разумно для одного человека, может не подходить для другого, поэтому Windows позволяет вам настроить продолжительность двойного касания в Панели управления.

Имеется функция Windows API named GetDoubleClickTime, который, кажется, возвращает значение, настроенное в Windows. Однако эта функция помечена как «[только настольные приложения]», что означает, что я не могу вызвать эту функцию из приложения Windows UWP.

Что такое Windows UWP, эквивалентное этой функции, или как бы я выяснить, какова настроенная продолжительность двойного нажатия?

1 Ответ

1 голос
/ 04 июня 2020

Как указано в комментариях под моим вопросом, длительность двойного нажатия Windows доступна через UISettings. Во-первых, должен быть построен объект объекта этого класса. Я делаю это как член класса, используя следующую строку кода:

Windows::UI::ViewManagement::UISettings _uiSettings;

Продолжительность двойного касания, которая я думаю, совпадает с продолжительностью двойного щелчка, может быть доступ осуществляется через свойство DoubleClickTime объекта _uiSettings. Он возвращает unsigned int, который выражает продолжительность двойного касания в миллисекундах.

Поскольку строка e->CurrentPoint->Timestamp кода в моем вопросе возвращает время в микросекундах, необходимо умножить DoubleClickTime на 1000 чтобы иметь возможность сравнить эти значения.

Итак, полный код теперь выглядит следующим образом:

if((e->CurrentPoint->Timestamp - _lastTimestamp) < (_uiSettings.DoubleClickTime * 1000))
{
  Dispatcher->RunAsync(CoreDispatcherPriority::Normal, ref new DispatchedHandler([this]()
  {
    // Do whatever needs to be done on double-taps
  }));
}

_lastTimestamp = e->CurrentPoint->Timestamp;

Изменение продолжительности двойного касания в настройках мыши Windows ' Панель управления также изменит возвращаемое значение свойства DoubleClickTime.

Mouse Settings

Обратите внимание, что изменение значения таким образом изменяет значение DoubleClickSpeed в ключе реестра HKEY_CURRENT_USER\Control Panel\Mouse. Значение по умолчанию - 500 (миллисекунды).

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...