Загрузите встроенный анимированный курсор из ресурса

У меня есть анимированный файл курсора (* .ani) в ресурсах, и я хочу показать его как курсор в моем приложении. Как я могу загрузить его из ресурсов?

Я посмотрел в Интернете, но есть только способы показать это, когда у вас есть настоящий файл, и если он не встроен в ресурсы.

 Wonderwhy17 авг. 2010 г., 23:58
@ Джон: Хорошо, извините, не знал, что
 Merlyn Morgan-Graham17 авг. 2010 г., 04:32
@ Джон: Привет, Джон! Вы имеете в виду, что вы не хотите общаться? Спасибо за чтение этого!
 John Saunders17 авг. 2010 г., 04:30
пожалуйста, не используйте "Привет", "Спасибо" или подписи здесь на SO. Это не дискуссионный форум.

Ответы на вопрос(2)

Решение Вопроса

// модифицированный класс от Ивана Дженесс

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


}
 Wonderwhy30 нояб. 2010 г., 18:18
Спасибо Иван :)

Вставить ани файл в качестве ресурса и использовать функции WindowsCreateIconFromResource чтобы создать его и DestroyIcon, когда закончите.

IntPtr hCursor;
try
{
   hCursor = CreateIconFromResource(resource, (uint)resource.Length, false, 0x00030000);
   this.Cursor = new Cursor(hCursor);
   ...
}
finally
{
   this.Cursor = Cursors.Normal;
   DestroyIcon(hCursor);
}

Ваш ответ на вопрос