1

在带有 Winforms 的 VB.Net 中,即使图像离开表单,如何使图像跟随光标?我想在拖放操作期间执行此操作。BCL 和/或 GDI 比 P/Invokes 更适合我的用例。

如果您熟悉 PeaZip,它会在从其界面拖动文件时执行此类操作。

4

2 回答 2

0

最简单的方法似乎只是将鼠标光标简单地更改为默认鼠标光标和您想要跟随它的图像的合成图像。然后在完成后将其更改回默认鼠标光标。

使用 P/Invokes 有很多方法可以做到这一点,但这里有一个关于如何在没有它们的情况下做到这一点的理论。在我遇到的示例中,P/Invokes 主要用于获取指向/用于已创建并编组到非托管内存中的游标结构的指针。然后将指针传递给 System.Windows.Forms.Cursor 类的构造函数。

但是,在接受内存流的游标类中有一个重载。如果可以在内存流中构造相同的游标文件结构,则可以将其传递给构造函数,这将为我们提供要更改的游标。'cur' 图像文件与'ico' 文件非常相似,并且相当简单。它包括一个小标题、一个图像目录,最后是图像数据本身(ICO 文件格式的维基百科条目)。这不应该太难构建然后写入内存流。

于 2010-10-05T20:52:37.023 回答
0

有关使用 P/Invokes 执行此操作的信息:

CodeProject:自定义鼠标光标(VB.NET)

文章中的关键点:

<DllImport("user32.dll", EntryPoint:="CreateIconIndirect")> _
Private Shared Function CreateIconIndirect(ByVal iconInfo As IntPtr) As IntPtr
End Function

<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Public Shared Function DestroyIcon(ByVal handle As IntPtr) As Boolean
End Function

<DllImport("gdi32.dll")> _
Public Shared Function DeleteObject(ByVal hObject As IntPtr) As Boolean
End Function
于 2010-10-05T01:09:09.100 回答