使用Windows拖动复制光标

5

我可以像这样设置光标:

Me.Cursor = Cursors.Cross

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

Copy Cursor

有没有办法以受控方式获取它? 我不想加载位图之类的东西。 我希望将其留给Windows处理,因为用户可能会更改光标大小或设置不同的颜色模式。

1个回答

13

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

enter image description here

[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);
}

1
我在这篇文章中分享的图片是从导出的光标中获取的。我使用Visual Studio文件→打开导出了这些光标。您始终可以对光标、图标和其他资源执行相同的操作。您还可以将它们作为嵌入式资源添加到应用程序中。此外,如果它是标准的拖放操作,则最好依赖于基于e.Effect设置的标准光标,在拖放事件中设置。 - Reza Aghaei
System.Windows.Input.Cursor没有接受IntPtr参数的构造函数。有什么办法可以解决这个问题吗? - Nigel
@NigelBess 这是一个Windows Forms的答案,请查看光标构造函数 - Reza Aghaei
@NigelBess 我发布了一个WPF问题和答案,展示了如何从IntPtr句柄创建WPF光标。链接:https://dev59.com/8mkMtIcB2Jgan1znY6Tb。 - Reza Aghaei
有趣的是我们都找到了相同的解决方案并创建了相同的问题和答案:这里 是我今天早些时候发布的问题和答案。 - Nigel
太棒了!很高兴听到你解决了它。@NigelBess - Reza Aghaei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接