【发布时间】:2014-06-17 16:23:29
【问题描述】:
我在选择对象时遇到了用户拖动对象的问题。我尝试了几种使用鼠标事件设置不太敏感的阈值的方法。对于example。
我认为它们不工作主要是因为我使用的是 Piccolo 图形引擎。
我知道这可以通过注册表来完成,但我不想弄乱我的用户注册表项。
替代方法似乎是使用带有SystemParametersInfo; 以及 SPI_SETDRAGHEIGHT 和 SPI_SETDRAGWIDTH 参数的 pinvoke。
我知道如何调用它,
[DllImport("user32.dll", SetLastError = true)]
static extern bool SystemParametersInfo(int uiAction, int uiParam, IntPtr pvParam, int fWinIni);
而且我知道uiAction 参数值是,
SPI_SETDRAGHEIGHT = 0x004D
SPI_SETDRAGWIDTH = 0x004C
我知道uiParam 是宽度或高度。
除此之外,我被困住了。我真的不明白这些东西,也不知道如何设置最后两个参数。
有 C++(?) 代码here。
但我对 C 变体并将它们转换为 C# 的知识令人遗憾。
那么有人可以帮我在我的应用程序中设置拖动阈值吗?
【问题讨论】:
-
我怀疑 Piccolo 实现了它自己的拖放功能,如果你想依赖他们的库,那么你就会遇到 Piccolo 使用的任何阈值。 Piccolo 可能不允许(也可能不允许)通过注册表设置修改阈值。如果该设置可配置,您可以询问其他 Piccolo 用户。
-
@RogerN 你是对的,拖动处理程序似乎忽略了我所有的努力并影响了它。这就是为什么我想走 pinvoke 路线
-
Pass IntPtr.Zero,该参数不用于此设置。最后一个参数是 2,它让每个正在运行的程序都知道您更改了系统设置。是的,用户会讨厌你,确保你的卸载程序是可靠的。如果您不想更改源代码,则使用开源软件没有多大意义:)
-
谢谢汉斯。我希望在应用关闭之前读取该值然后将其重置。
标签: c# winforms drag-and-drop