【问题标题】:Load an embedded animated Cursor from the Resource从资源加载嵌入的动画光标
【发布时间】:2011-03-30 18:13:08
【问题描述】:

我在资源中有一个动画光标文件 (*.ani),并希望在我的应用程序中将其显示为光标。如何从资源中加载它?

我在网上查了一下,但是只有当你有一个真实的文件并且它没有嵌入到资源中时才能显示它。

【问题讨论】:

  • 请不要在 SO 上使用“Hi”、“Thanks”或签名。这不是一个讨论论坛。
  • @John:嗨,约翰!你的意思是你不想聊天?感谢您阅读本文!
  • @John:好的,抱歉,不知道

标签: c# resources cursor embed animated


【解决方案1】:

将 ani 文件作为资源嵌入并使用 windows 函数 CreateIconFromResource 创建它并在完成后使用 DestroyIcon。

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

【讨论】:

    【解决方案2】:

    //这里的资源修改是:byte[]变量资源在调用中

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-13
      • 2018-10-15
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 2012-02-05
      • 2011-07-24
      相关资源
      最近更新 更多