我正在编写一个小项目,我想利用拖放功能来简化最终用户的一些操作。为了使应用程序更具吸引力,我想显示被拖动的对象。我已经在WPF中找到了一些资源,但是我不知道任何WPF,因此对于这个单一任务来说,完全没那么严重。我想知道如何使用“常规”C#Windows窗体完成此操作。到目前为止,我发现的所有拖放教程都只是谈论掉落效果,它只是几个图标的预设。
WPF听起来像是我想在这个项目之后学到的东西。
答案 0 :(得分:7)
@Jesper提供的博客链接提供了两三个关键信息,但我认为值得将它带入S.O.为了后代。
以下代码允许您使用光标的任意图像
public struct IconInfo
{
public bool fIcon;
public int xHotspot;
public int yHotspot;
public IntPtr hbmMask;
public IntPtr hbmColor;
}
[DllImport("user32.dll")]
public static extern IntPtr CreateIconIndirect(ref IconInfo icon);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetIconInfo(IntPtr hIcon, ref IconInfo pIconInfo);
public static Cursor CreateCursor(Bitmap bmp, int xHotSpot, int yHotSpot)
{
IconInfo tmp = new IconInfo();
GetIconInfo(bmp.GetHicon(), ref tmp);
tmp.xHotspot = xHotSpot;
tmp.yHotspot = yHotSpot;
tmp.fIcon = false;
return new Cursor(CreateIconIndirect(ref tmp));
}
其他教程和答案中都详细介绍了这一点。我们在这里关注的具体事件是GiveFeedback和DragEnter,适用于您希望自定义光标应用的任何控件。
private void DragSource_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
e.UseDefaultCursors = 0;
}
private void DragDest_DragEnter(object sender, DragEventArgs e)
{
Cursor.Current = CreateCursor(bitmap, 0, 0);
}
答案 1 :(得分:1)
您需要隐藏默认光标并创建包含自定义图像的窗口,然后使用鼠标位置移动该窗口。
更新2015-11-26
更新了链接以指向archive.org的上一个快照