WPF create custom mouse cursor pointer

Two constructors in the WPF Cursor class:

public Cursor(Stream cursorStream)
public Cursor(string cursorFile)

The resources used by the above constructors are all ani or cur files, and do not support image generation.

    /// This class allow you create a Cursor form a Bitmap
    /// </summary>
    internal class BitmapCursor : SafeHandle
    {

        public  override  bool IsInvalid
        {
            get
            {
                return handle == (IntPtr)(-1);
            }
        }


        public static Cursor CreateBmpCursor(Bitmap cursorBitmap)
        {

            var c = new BitmapCursor(cursorBitmap);

            return CursorInteropHelper.Create(c);
        }



        protected BitmapCursor(Bitmap cursorBitmap)
            : base((IntPtr)(-1), true)
        {
            handle = cursorBitmap.GetHicon();
        }


        protected override bool ReleaseHandle()
        {
            bool result = DestroyIcon(handle);

            handle = (IntPtr)(-1);

            return result;
        }

        [DllImport("user32")]
        private static extern bool DestroyIcon(IntPtr hIcon);
    }

Extension methods provided:

public static Bitmap BitmapSourceToBitmap(this BitmapSource source)
        {
            using (var stream = new MemoryStream())
            {
                var e = new BmpBitmapEncoder();
                e.Frames.Add(BitmapFrame.Create(source));
                e.Save(stream);

                var bmp = new Bitmap(stream);

                return bmp;
            }
        }

Reprinted from: http://www.cnblogs.com/zhouyinhui/archive/2010/05/28/1746502.html

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325098484&siteId=291194637