Search code examples
c#resourcescursorembedanimated

Load an embedded animated Cursor from the Resource


I have an animated Cursor file (*.ani) in the resources and want to show it as a cursor in my application. How can I load it from the resources?

I looked up in the Internet, but there are only ways to show it when u have a real file and if it is not embedded in the resources.


Solution

  • // from resources modification here is : byte[] variable resource in the call

    // modified class by Yvan Genesse

    public class AdvancedCursorsFromEmbededResources
    
    {
    
    // modified by Yvan Genesse November 29 2010 
    
    // C# example tested in MS Visual Studio 2010 Ultimate version
    // University Student in E-Business @ Laurentian University
    
    // in your form code
    /*
    try
    {
    // from file
    //this.Cursor = AdvancedCursors.Create(Path.Combine(Application.StartupPath, "flower_anim.ani"));
    // from resouces   modification here is :   byte[] resource in the call
    byte[] Embeded_Cursor_Resource = Properties.Resources.flower_anim;  // the animate cursor desired
    this.Cursor = AdvancedCursorsFromEmbededResources.Create(Embeded_Cursor_Resource);
    
    // or this way also works
    this.Cursor = AdvancedCursorsFromEmbededResources.Create(Properties.Resources.flower_anim);
    }
    catch (Exception err)
    {
    MessageBox.Show(err.Message);
    }
    
    */
    
    
    
    [DllImport("user32.dll")]
    static extern IntPtr CreateIconFromResource(byte[] presbits, uint dwResSize, bool fIcon, uint dwVer);
    
    // modification here is :   byte[] resource in the call       
    public static Cursor Create( byte[] resource)
    {
        IntPtr myNew_Animated_hCursor;
    
        //byte[] resource = Properties.Resources.flower_anim;
    
            myNew_Animated_hCursor = CreateIconFromResource(resource, (uint)resource.Length, false, 0x00030000);
    
        if (!IntPtr.Zero.Equals(hCursor))
            {
                // all is good
                    return new Cursor(myNew_Animated_hCursor);
           }
            else
           {  // resource wrong type or memory error occurred
        // normally this resource exists since you had to put  Properties.Resources. and a resource would appear and you selected it
        // the animate cursor desired  is the error generator since this call is not required for simple cursors
    
    
    
              throw new ApplicationException("Could not create cursor from Embedded resource ");
            }         
    }    
    
    
    }