poniedziałek, 18 sierpnia 2014

#Quick: zabawa kursorem (myszki), oraz o rozdzielczości ekranu

info

Poniższy artykuł powstał wyłącznie do celów edukacyjnych, a autor (czyli ja) nie ponosi odpowiedzialności za wykorzystanie informacji zawartych w poniższym tekście niezgodnie z prawem lub etyką zawodową.


Położenie kursora


Aby odczytać lub zmienić położenie kursora, wystarczy odwołać się do Cursor.Position :
//odczytanie położenia
int px = Cursor.Position.X;
int py = Cursor.Position.Y;


//zmiana położenia, trololo :)
Cursor.Position = new Point(100, 100);


Ograniczamy wolność kursora ;)

Ciekawym atrybutem przy Cursor jest Clip.
Umożliwia on ustalenie granic, w których możemy operować naszym kursorem. W Windows taką granicą domyślnie jest ustalona rozdzielczość. Spróbujmy ograniczyć możliwość poruszania się naszego kursora myszki wyłącznie do obszaru naszego okna (uwzględniając, aby nie możliwe było zamknięcie/zmiana rozmiaru naszego okna), jak na poniższym zrzucie:



Oczywiście możemy zmienić atrybut formatki form.FormBorderStyle na odpowiedni, ale wówczas tracimy na wyglądzie okienka i nie ma zabawy, rozwiązanie stałoby się mniej uniwersalne.

przepis:

 //pobieramy szybko wymiar naszego okna:
            Rectangle currentwindow = this.Bounds;

            //zmniejszamy obszar do zabawy oknie:
            //35 - przybliżony rozmiar górnego paska

            currentwindow.Height = this.Height - 35;

            //10: aby uniemożliwić zmianę rozmiaru okna
            currentwindow.Width = this.Width - 10;

            /* Ustawiamy położenie początkowe
             * (przesunięte o kilka pikseli,
             * aby nie można było zmieniać rozmiaru
             * z lewej/góry */

            currentwindow.Location = new Point(currentwindow.Location.X+5, currentwindow.Location.Y + 30);

            //podpinamy punkt początkowy granic i rozmiar
            Cursor.Clip = new Rectangle(currentwindow.Location, currentwindow.Size);



możemy pobrać sobie gotowe granice np do rozdzielczości ekranu głównego:

Rectangle resolution = Screen.PrimaryScreen.Bounds;

..lub wskazując na dowolny, poruszając się po kolekcji AllScreens:
Rectangle r2 = Screen.AllScreens[1].Bounds;

Zastosowanie

Zmianę/odczyt położenia możemy wykorzystać m.in. przy:
  • podpowiedzi użytkownikowi, gdzie w danym momencie powinien kliknąć użytkownik
  • tworzeniu aplikacji do zdalnego sterowania komputerem (a'la TeamViewer)
  • grach / programach graficznych
  • programach egzaminacyjnych
  • aplikacjach dla osób niepełnosprawnych, ułatwiających pracę
  • POS 
  • ...z okazji 1 kwietnia :)

Ograniczenia

Granice kursora zostaną "zresetowane" m.in. po:
  • zamknięciu programu
  • zmianie okna wiodącego
  • zmianie podświetlenia okna (np przycisk start, alt+tab, etc)
  • zmianie rozmiaru/położenia okna
Oczywiście można sobie z tym poradzić przy użyciu  zdarzeń, timera, backgroundworkera, etc.

Brak komentarzy:

Prześlij komentarz