2011-07-19 12 views
37

W UserControl Chcę zmienić kursor myszy ze strzałki na ikonę ręki.
Co ja obecnie zrobić to w ten sposób:Jak zmienić kursor myszy w niestandardowy podczas pracy z aplikacjami Windows Forms?

this.Cursor = Cursors.Hand; 

Jest to bardzo ładny, to daje mi kursor myszy wygląda tak:

enter image description here

Ale tutaj jest mój problem ... to pokazuje ręka z palcem wskazującym.
Co potrzebne jest "złapanie" ręka, bardziej podobny do tego:

enter image description here

Jak mogę to zrobić ?, W jaki sposób można załadować plik ikony (.ico), A (plik kursora. cur) lub plik obrazu (.png) i używać go jako kursora myszy?

+1

to jest tutorial: http://www.switchonthecode.com/tutorials/csharp-tutorial-how-to-use-custom-cursors Zasadniczo używa pinvoke i Windows API w celu osiągnięcia czego chcesz. – Tigran

+1

Przyjęta odpowiedź działa, jeśli dostarczony plik nie ma koloru. W przypadku, gdy masz kolor - musisz skorzystać z interfejsu API systemu Windows, jak opisano w mojej odpowiedzi poniżej. –

+0

@ Derek W: Nie zdawałem sobie z tego sprawy. Kursory, których używam, nie zawierają informacji o kolorach. –

Odpowiedz

17

Jeśli masz plik kursora:

Cursor myCursor = new Cursor("myCursor.cur"); 
myControl.Cursor = myCursor; 

przeciwnym razie trzeba utworzyć:

trochę więcej informacji na temat custom cursors

+0

Działa idealnie! Dziękuję również za ten link, nie znałem tej strony. –

2

Czy próbowałeś System.Windows.Forms.Cursor curs = new System.Windows.Forms.Cursor(file_name);?

0

zastrzeżenie do korzystania z niestandardowych kursory z WinForms Cursor klasy jest to, że przy użyciu strumienia pliku, a konstruktor zasobów przeciąża dostarczony .cur plik musi być czerni i bieli w kolorze.

Oznacza to, że nie zadziała to, jeśli pliki .cur zawierają kolory oprócz czerni i bieli.

Cursor myCursor = new Cursor("myCursor.cur"); 
myControl.Cursor = myCursor; 

Istnieje sposób obejścia tego ograniczenia za pomocą programu Windows przeciążenie konstruktora Rękojeść:

utworzyć uchwytu za pomocą Windows API:

[System.Runtime.InteropServices.DllImport("user32.dll")] 
public static extern IntPtr LoadCursorFromFile(string fileName); 

Następnie przekazać je do odpowiedniego Cursor konstruktora tak:

IntPtr handle = LoadCursorFromFile("myCursor.cur"); 
Cursor myCursor = new Cursor(handle); 
myControl.Cursor = myCursor; 

Mam nadzieję, że to zapobiegnie od drapania głowic do wyrzucanego ArgumentException stwierdzającego: Image format is not valid. The image file may be corrupted. przy użyciu innego konstruktora Cursor przeciążonego z plikiem .cur zawierającym kolor.

0

Przetestowałem tę metodę. W porządku. To jest mój zastosowanie:

[System.Runtime.InteropServices.DllImport("user32.dll")] 
    public static extern IntPtr LoadCursorFromFile(string fileName); 
    Cursor myCursor; 
    private void tsbtn_ZoomIn_Click(object sender, EventArgs e) 
    { 
     IntPtr handle = LoadCursorFromFile("view_zoom_in.cur"); 
     myCursor = new Cursor(handle); 
     zg1.Cursor = myCursor; 
    } 
Powiązane problemy