Wednesday, August 09, 2006

 

Loading a color cursor in .NET 2.0

The MSDN documentation on the Cursor class says
The Cursor class does not support animated cursors (.ani files) or cursors with colors other than black and white.
Consequently, if you try to display a color cursor, it appears as a black outline of the original. So, supposing that you already have a .cur file containing a color cursor, follow these steps to display it. If you don't already have a color .cur file, you can use Visual Studio 2005 to create such a file.
  1. Add the .cur to the project's resources using the Visual Studio 2005 resource designer by using the the "Add existing file" toolbar item. I'm going to assume that you named the resource "hand2."
  2. Add a P/Invoke declaration for LoadCursorFromFile.
    [DllImport("user32.dll")]
    static extern IntPtr LoadCursorFromFile(string lpFileName);
    
  3. At runtime, copy the cursor resource to a temporary file, ask the Win32 API to load that file as a cursor, and create .NET Cursor object from the Win32 handle.
    private Cursor LoadColorHandCursor()
    {
        string path = Path.GetTempFileName();
        File.WriteAllBytes(path, Properties.Resources.hand2);
        Cursor hand = new Cursor(LoadCursorFromFile(path));
        File.Delete(path);
        return hand;
    }
    
The same technique will work in .NET 1.x, but it'll take a little more work to write the cursor to a temporary file.

Here's a working code example.

kick it on DotNetKicks.com


Comments:
Thank you, Che, I was mad to do that, at least somebody is there I found to help me.
 
very useful tip!
 
Thanks! I couldn't figure out why it always turned the cursor black.
 
Very good, brief and informative tutorial. I was trying to load a colored cursor into my .net application with no hope at all until I read your tutorial. Thanks a lot. but the question is why Microsoft didn't do a wrapper or a class for doing this in .net framework directly? What if a .net developer don't know or never use the Win32 APIs (like me)? Why they didn't think of that ??
 
Thanks man, you made my day :)
 
Post a Comment

<< Home

This page is powered by Blogger. Isn't yours?