public void CreateDragCursor(DragDropEffects aEffect) { if (iCursorInfo.Effect != aEffect) { if (iCursorInfo.Cursor != null) { iCursorInfo.Cursor.Dispose(); iCursorInfo.Cursor = null; iCursorInfo.Effect = DragDropEffects.None; } } if (SelectedIndices.Count > 0 && iCursorInfo.Cursor == null) { ListViewKinsky.Item item = iCursorInfo.Item; Bitmap image = new Bitmap(item.ListView.Width + 32, item.Bounds.Size.Height + 32, PixelFormat.Format32bppArgb); Graphics g = Graphics.FromImage(image); item.Draw(g, true); switch (aEffect) { case DragDropEffects.Copy: kCursorCopy.Draw(g, new Rectangle(iCursorInfo.HotSpot.X, iCursorInfo.HotSpot.Y, kCursorCopy.Size.Width, kCursorCopy.Size.Height)); break; case DragDropEffects.Move: kCursorMove.Draw(g, new Rectangle(iCursorInfo.HotSpot.X, iCursorInfo.HotSpot.Y, kCursorMove.Size.Width, kCursorMove.Size.Height)); break; default: kCursorNone.Draw(g, new Rectangle(iCursorInfo.HotSpot.X, iCursorInfo.HotSpot.Y, kCursorNone.Size.Width, kCursorNone.Size.Height)); break; } g.Dispose(); CursorApi.IconInfo iconInfo = new CursorApi.IconInfo(); iconInfo.fIcon = false; iconInfo.xHotspot = iCursorInfo.HotSpot.X; iconInfo.yHotspot = iCursorInfo.HotSpot.Y; iconInfo.hbmColor = image.GetHbitmap(); iconInfo.hbmMask = image.GetHbitmap(); IntPtr pIconInfo = Marshal.AllocHGlobal(Marshal.SizeOf(iconInfo)); Marshal.StructureToPtr(iconInfo, pIconInfo, true); IntPtr pIcon = CursorApi.CreateIconIndirect(pIconInfo); CursorApi.DestroyIcon(pIconInfo); CursorApi.DeleteObject(iconInfo.hbmMask); CursorApi.DeleteObject(iconInfo.hbmColor); iCursorInfo.Cursor = new Cursor(pIcon); iCursorInfo.Effect = aEffect; } }