【问题标题】:Change SystemParameters更改系统参数
【发布时间】:2011-08-14 13:21:54
【问题描述】:

只是一个简单的问题:SystemParameters 类到底是什么?它只是“默认值”的集合,还是实际上与 Windows 挂钩?

背景:对于拖放操作,我们使用 SystemParameters.MinimumHorizo​​ntalDragDistance 和 SystemParameters.MinimumVerticalDragDistance 属性来检测 D&D。对于触摸屏,默认值很小,我想知道是否必须实现一些配置机制来更改此值,或者是否可以在某处更改某些系统设置(比如说注册表或控制面板或其他)。

谢谢!

更新:通过下面的详细答案,我终于找到了我正在寻找的东西。仅供参考,如果其他人将来正在寻找它:可以在注册表中更改最小拖动距离

HKEY_CURRENT_USER\Control Panel\Desktop\DragHeight
HKEY_CURRENT_USER\Control Panel\Desktop\DragWidth

默认情况下,这两个值都设置为 4 (px)。请注意,更改仅在重新启动后才会生效。

【问题讨论】:

    标签: c# .net wpf drag-and-drop


    【解决方案1】:

    它反映了用户当前的设置,如在整个 Windows 中的不同位置所指定的那样。 用户可以在控制面板中轻松更改一些设置,而其他设置则位于注册表值等更隐蔽的位置。

    最终,它是来自 Windows API 的 GetSystemMetrics function 的托管包装器。

    documentation 提供了更具体的详细信息,说明它在何处获取属性公开的每个值。例如,SystemParameters.MinimumHorizontalDragDistance property 对应于以拖动点为中心的矩形的宽度,以允许在拖动操作开始之前鼠标指针的有限移动。从本质上讲,这是允许用户在系统将其动作解释为开始拖动之前碰撞或推挤光标的“余地”。

    文档还告诉您它在GetSystemMetrics 函数中映射到SM_CXDRAG。因此,如果您需要更详细的信息,可以仔细阅读本机函数的文档,它会告诉您以下内容:

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

    简而言之,它绝对是“与 Windows 挂钩”。这是确定系统设置的适当方法,而不是在开发时似乎需要的硬编码值。你的应用程序不应该为系统已经允许用户配置的东西暴露它自己的配置接口;这既多余又令人困惑。

    【讨论】:

    • 感谢非常详细的回答!我很清楚参数的作用和用途。我实际上是在寻找在系统中设置它的地方。另一方面......我没有特别要求它:)你的回答让我走上了正确的轨道!
    • @harri:哎呀!请记住,您不应该直接修改注册表来更改这样的设置。有a documented API for it。你想要SystemParametersInfo 函数,带有SPI_SETDRAGHEIGHTSPI_SETDRAGWIDTH 参数。
    • 问题是:我不想编写代码来更改设置。当我们的测试人员在触摸屏上测试应用程序时,他们提出了增加 D&D 距离的请​​求。使用触摸屏几乎不可能在不启动 D&D 操作的情况下单击项目。但这个问题不是特定于软件,而是整个系统。所以我不希望我们的软件调整这些值。它应该针对整个操作系统进行,这会有点令人困惑。
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 2014-10-06
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    相关资源
    最近更新 更多