如何从 Windows UWP 应用程序中查询双击持续时间?
How to query the double-tap duration time from Windows UWP apps?
在我的 Windows UWP 应用程序中,我有一个对双击做出反应的组件。我通过响应 CoreIndependentInputSource
的 PointerPressed
事件来实现这一点。在事件处理程序中,我得到了以下代码:
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
设置为 "reasonable" 值。对一个人来说合理的事情可能对另一个人不合理,这就是为什么 Windows 允许您在控制面板中配置双击的持续时间。
有一个名为 GetDoubleClickTime
的 Windows API function 似乎 return 在 Windows 中配置的值。但是,该函数被标记为“[仅限桌面应用程序]”,这意味着我无法从 Windows UWP 应用程序调用该函数。
与该功能等效的 Windows UWP 是什么,或者我如何确定双击的配置持续时间是多少?
如我问题下方的评论所述,Windows 的双击持续时间可以通过 UISettings
访问。首先,必须构造 class 的对象的对象。我作为 class 成员使用以下代码行执行此操作:
Windows::UI::ViewManagement::UISettings _uiSettings;
双击持续时间,我认为与双击持续时间相同,可以通过 属性 DoubleClickTime
访问_uiSettings
对象。它 return 是一个 unsigned int
,以毫秒为单位表示双击持续时间。
因为我问题中代码的行 e->CurrentPoint->Timestamp
return 是以微秒为单位的时间,所以有必要将 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
属性 的 return 值。
请注意,以这种方式更改值会更改注册表项 HKEY_CURRENT_USER\Control Panel\Mouse
中 DoubleClickSpeed
的值。默认值为 500(毫秒)。
在我的 Windows UWP 应用程序中,我有一个对双击做出反应的组件。我通过响应 CoreIndependentInputSource
的 PointerPressed
事件来实现这一点。在事件处理程序中,我得到了以下代码:
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
设置为 "reasonable" 值。对一个人来说合理的事情可能对另一个人不合理,这就是为什么 Windows 允许您在控制面板中配置双击的持续时间。
有一个名为 GetDoubleClickTime
的 Windows API function 似乎 return 在 Windows 中配置的值。但是,该函数被标记为“[仅限桌面应用程序]”,这意味着我无法从 Windows UWP 应用程序调用该函数。
与该功能等效的 Windows UWP 是什么,或者我如何确定双击的配置持续时间是多少?
如我问题下方的评论所述,Windows 的双击持续时间可以通过 UISettings
访问。首先,必须构造 class 的对象的对象。我作为 class 成员使用以下代码行执行此操作:
Windows::UI::ViewManagement::UISettings _uiSettings;
双击持续时间,我认为与双击持续时间相同,可以通过 属性 DoubleClickTime
访问_uiSettings
对象。它 return 是一个 unsigned int
,以毫秒为单位表示双击持续时间。
因为我问题中代码的行 e->CurrentPoint->Timestamp
return 是以微秒为单位的时间,所以有必要将 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
属性 的 return 值。
请注意,以这种方式更改值会更改注册表项 HKEY_CURRENT_USER\Control Panel\Mouse
中 DoubleClickSpeed
的值。默认值为 500(毫秒)。