在使用Winforms的VB.Net中,即使离开表单,如何使图像跟随光标?我想在拖放操作中执行此操作。对于我的用例,BCL和/或GDI比P / Invokes更好。
如果您熟悉PeaZip,那么在从其界面拖动文件时,它会执行此类操作。
答案 0 :(得分:0)
有关使用P / Invokes执行此操作的信息:
CodeProject: Custom Mouse Cursors (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
答案 1 :(得分:0)
最简单的方法似乎是将鼠标光标简单地更改为默认鼠标光标的合成图像和您想要的图像。完成后,将其更改回默认鼠标光标。
有很多方法可以用P / Invokes来做到这一点,但这里有一个如何在没有它的情况下做到这一点的理论。在示例中,我遇到过P / Invokes主要用于获取指向/用于游标的指针已经创建并编组到非托管内存中的结构。然后将指针传递给System.Windows.Forms.Cursor类的构造函数。
但是,Cursor Class中存在一个接受内存流的重载。如果可以在内存流中构造相同的游标文件结构,则可以将其传递给构造函数,这将使我们将Cursor更改为。 'cur'图像文件与'ico'文件非常相似,而且相当简单。它由一个小标题,一个图像目录,最后是图像数据本身(Wikipedia entry on the ICO file format)组成。这不应该太难构建,然后写出内存流。