Can I choose a custom image for C# Windows Application Drag Drop functions?

后端 未结 2 1046
孤街浪徒
孤街浪徒 2020-12-10 08:33

I am writing a small project where I would like to make use of drag and drop functionalty to ease some of the operations for the end user. To make the application a little m

相关标签:
2条回答
  • 2020-12-10 09:12

    The blog link provided by @Jesper gives the two or three key nuggets of info, but I think it is worth bringing it into S.O. for posterity.

    Set up the custom cursor

    The code below allows you to use an arbitrary image for your cursor

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

    Set up the drag and drop event handling

    This is well covered in other tutorials and answers. The specific events we are concerned about here are GiveFeedback and DragEnter, on any control where you want the custom cursor to apply.

     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);
         }
    
    0 讨论(0)
  • 2020-12-10 09:24

    You need to hide the default cursor and create your own window containing your custom image and then move that window with the position of the mouse.

    You might also take a look at http://web.archive.org/web/20130127145542/http://www.switchonthecode.com/tutorials/winforms-using-custom-cursors-with-drag-drop

    UPDATE 2015-11-26

    Updated the link to point to archive.org's last snapshot

    0 讨论(0)
提交回复
热议问题