【问题标题】:Using the Windows Drag Copy cursor使用 Windows 拖动复制光标
【发布时间】:2018-03-26 07:19:14
【问题描述】:

我可以这样设置光标:

Me.Cursor = Cursors.Cross

使用 IntelliSense,我没有找到这个“复制”光标:

有没有办法以托管方式获得它? 我不想加载位图左右。 我想把它留给 Windows,因为用户可能已经更改了光标大小或设置了不同的颜色模式。

【问题讨论】:

  • 这是一个拖动光标,当您执行拖放功能时会自动出现。
  • @Sunil 谢谢。编辑了我的标题。有没有办法不拖拽调用呢?
  • 拖放光标是后来的附加组件,从未成为系统光标的一部分。您可以窃取它们,使用 File > Open > File 并选择 c:\windows\system32\ole32.dll。打开游标节点,右键单击 > 导出。实现自己的 D+D 而不是使用标准的 DoDragDrop() 和朋友几乎总是一个非常糟糕的主意。

标签: c# .net winforms


【解决方案1】:

拖放光标属于ole32.dll。您可以从该库中加载它们。为此,您需要使用LoadLibrary 加载ole32.dll,然后使用LoadCursor 获取这些游标的句柄。您可以使用 1 到 7 作为LoadCursor 参数从ole32.dll 获取游标。您要查找的光标是36

[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string dllToLoad);

[DllImport("user32.dll")]
public static extern IntPtr LoadCursor(IntPtr hInstance, UInt16 lpCursorName);

private void button1_Click(object sender, EventArgs e)
{
    var l = LoadLibrary("ole32.dll");
    var h = LoadCursor(l, 6);
    this.Cursor = new Cursor(h);
}

【讨论】:

  • 我在这篇文章中分享的图片取自导出的游标。我使用 Visual Studio File→Open 导出了这些光标。你总是可以对光标、图标和其他资源做同样的事情。您还可以依赖将它们作为嵌入式资源添加到您的应用程序中。此外,如果它是标准的拖放操作,最好依靠在拖放事件中基于e.Effect 设置的标准光标。
  • System.Windows.Input.Cursor 没有接受 IntPtr 的构造函数。知道如何解决这个问题吗?
  • @NigelBess 这是 Windows 窗体的答案,请查看 Cursor Constructors
  • @NigelBess 我发布了一个 WPF 问题和答案以显示 How to create a WPF Cursor from an IntPtr handle
  • 有趣的是,我们都找到了相同的解决方案并创建了相同的问题和答案:Here 是我今天早些时候提出的问题和答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 2021-03-04
  • 2013-04-21
相关资源
最近更新 更多