在VB.Net中使用Winforms如何在光标离开窗体时使图像跟随光标?我想在拖放操作过程中执行此操作。 BCL和/或GDI比P/Invokes更适合我的用例。即使在应用程序外部,我如何制作图像也会跟着光标?
如果你对PeaZip很熟悉,当从它的界面拖拽一个文件时,它会做这样的事情。
在VB.Net中使用Winforms如何在光标离开窗体时使图像跟随光标?我想在拖放操作过程中执行此操作。 BCL和/或GDI比P/Invokes更适合我的用例。即使在应用程序外部,我如何制作图像也会跟着光标?
如果你对PeaZip很熟悉,当从它的界面拖拽一个文件时,它会做这样的事情。
要做到这一点最简单的方法似乎只是简单的改变鼠标光标到默认鼠标光标和您想要的图像之后的复合图像。然后在完成后将其更改回默认的鼠标光标。
有些方法可以用P/Invokes来做到这一点,但这里有一个关于如何在没有它们的情况下做到这一点的理论。在P/Invokes中运行的示例中,主要用于获取指向/的游标结构,该结构已被创建并被组装到非托管内存中。然后指针被传递给System.Windows.Forms.Cursor类的构造函数。
但是,在接受Memory Stream的Cursor Class中存在重载。如果可以在Memory Stream中构建相同的游标文件结构,则可以将其传递给构造函数,这会让我们将游标更改为。 'cur'图像文件与'ico'文件非常相似,并且非常简单。它包含一个小标题,一个图像目录,最后是图像数据本身(Wikipedia entry on the ICO file format)。这不应该太难构建,然后写出一个内存流。
有关使用P /调用做信息:从文章
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