首页 > 解决方案 > 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;
    }

标签: c#windowsscalingdpi

解决方案


如果您在商店购买 1080x1920 显示器,它总是会告诉您这个尺寸,并且可能有功能会向您报告已缩放的尺寸,但 Pixel 中的尺寸将始终未缩放。这就是像素的定义。

如果您查看源代码

 _minimumHorizontalDragDistance = 
  SystemParameters.ConvertPixel(UnsafeNativeMethods.GetSystemMetrics(SM.CXDRAG))

如果你查看 Win32-API

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getsystemmetrics

在拖动操作开始之前鼠标指针可以移动的鼠标按下点两侧的像素数。这允许用户轻松单击和释放鼠标按钮,而不会无意中启动拖动操作。如果此值为负,则从鼠标按下点的左侧减去该值并添加到它的右侧。

它说得很清楚,它是像素。因此,分辨率越高,用户可以调整的东西越精细。如果您对其进行缩放,用户将无法使用更高的分辨率。


推荐阅读