Esempio n. 1
0
        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;
            }
        }