c# - Windows 内置的最小拖动距离参数是否按 DPI 缩放?
问题描述
我的应用程序中有一个窗口,只有当鼠标移动一定距离时才应该拖动它。我希望这个距离与 Windows 默认值相同,但无论我的显示器的 DPI 缩放如何,它似乎都是 4。我是否必须缩放值 4,或者它实际上是 DPI 感知的?
我正在执行以下操作来检查是否应该开始拖动:
private static bool HasMouseMovedFarEnough(MouseEventArgs e)
{
Debug.Assert(_startPoint != null);
Vector delta = _startPoint.Value - e.GetPosition(null);
return Math.Abs(delta.X) > SystemParameters.MinimumHorizontalDragDistance ||
Math.Abs(delta.Y) > SystemParameters.MinimumVerticalDragDistance;
}
解决方案
如果您在商店购买 1080x1920 显示器,它总是会告诉您这个尺寸,并且可能有功能会向您报告已缩放的尺寸,但 Pixel 中的尺寸将始终未缩放。这就是像素的定义。
如果您查看源代码
_minimumHorizontalDragDistance =
SystemParameters.ConvertPixel(UnsafeNativeMethods.GetSystemMetrics(SM.CXDRAG))
如果你查看 Win32-API
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getsystemmetrics
在拖动操作开始之前鼠标指针可以移动的鼠标按下点两侧的像素数。这允许用户轻松单击和释放鼠标按钮,而不会无意中启动拖动操作。如果此值为负,则从鼠标按下点的左侧减去该值并添加到它的右侧。
它说得很清楚,它是像素。因此,分辨率越高,用户可以调整的东西越精细。如果您对其进行缩放,用户将无法使用更高的分辨率。
推荐阅读
- maven - mvn 版本:设置当子模块与其父模块匹配时不更改它们的版本,这与聚合器 pom 不同
- php - 在将产品添加到购物车之前需要 Woocommerce 复选框
- twitter-bootstrap-3 - 将站点从 Bootstrap 4.0.0 升级到最新的 4.3.1 的最佳方法是什么?
- javascript - 如何检测函数是正常调用还是作为标记模板文字调用?
- python - Python SSL 信任自签名证书
- php - 显示错误 Laravel
- azure - 部署 Azure docker 容器不更新 ngix.conf
- java - 清除和替换 SwipeRefresh 布局上的列表视图项
- xml - 如何使用 XML::LibXML::Reader 获取属性名称列表?
- javascript - 将(相同)行格式化为特定标记点之间的不同样式