Mouse SVGA


Strona główna | Autor | Borland C++ 5.5 | GUI | Książki | OpenGL | Programy | Projekty | Teksty

Opis

Standardowy sterownik myszki nie potrafi obsługiwać trybów graficznych kart SVGA. Przed autorem programu mającego pracować np. w trybie graficznym 1024 x 760 w 256 kolorach stoi więc zadanie samodzielnego oprogramowania myszki. Przykładowe rozwiązanie tego problemu przedstawia niniejszy artykuł.

Idea wykorzystania myszki w trybach SVGA jest prosta. Wykorzystywany jest standardowy sterownik myszki, który zajmuje się odczytywaniem ruchów myszki. Do zaimplementowania pozostaje wyświetlanie kursora myszki, jego ukrywanie i pokazywanie oraz oczywiście reakcja na przesunięcie myszki. Funkcję reagującą na ruchy myszki najwygodniej jest "podłączyć" pod przerwanie zegarowe - zagwarantuje to jej stałe wykonywanie w tle.

Prezentowane rozwiązanie jest bardzo uniwersalne. Przykładowy program został napisany w języku C++ z użyciem kompilatora Borland C++ 3.1 i do działania wymaga sterownika BGI "VESA256" obsługującego karty graficzne zgodne ze standardem VESA. Program testowany był ze standardowymi sterownikami BGI tj. EGAVGA.BGI i CGA.BGI we wszystkich dostępnych trybach. Działanie programu zostało także przetestowane ze sterownikiem VESA.BGI autorstwa Jordana Hargraphixa.

W przykładowym programie została zaimplementowana klasa Mouse, która odpowiada za obsługę kursora myszki oraz komunikację z użytkownikiem. Klasa ta posiada następujące metody publiczne:

Szczegóły implementacji stanowią metody prywatne klasy Mouse (Init, DrawCursor, Run) oraz zmienne lokalne zawarte w pliku "mouse.cpp". Metoda Init wywoływana jest tylko raz (bez względu na ilość jednocześnie istniejących obiektów klasy Mouse) i dokonuje inicjacji sterownika myszki zwracając wartość niezerową w przypadku sukcesu. Metoda DrawCursor jak sama nazwa wskazuje odpowiedzialna jest za rysowanie kursora myszki, natomiast metoda RunMouse jest funkcją "podczepianą" pod przerwanie zegarowe. Zmienne wewnętrzne opisane są na listingu.

Pewnych wyjaśnień wymaga sposób rysowania i przechowywania kursora myszki. Zastosowałem typowy dla sterownika myszki opis kursora na który składają się dwie maski bitowe AND i XOR zawierające po 16 liczb dwubajtowych. Szczegóły budowy obu masek i tworzenia obrazu kursora myszki opisuje praca [1]. Nic nie stoi na przeszkodzie aby czytelnik samodzielnie zaprojektował własny kursor myszki wykorzystując program zawarty w pracy [7] lub, w ostateczności, posługując się zwykłą kartką papieru. Nieco trudniejszym zadaniem jest samodzielne napisanie funkcji rysującej kursor.

Dołączony wydruk przykładowego programu wykorzystującego klasę Mouse ustawia tryb graficzny 640 X 480 w 256 kolorach z wykorzystaniem sterownika VESA256.BGI, wyświetla informację o bieżącym trybie graficznym, wyświetla kursor myszki a po naciśnięciu prawego przycisku kończy działanie. Lewy przycisk powoduje wyświetlenie informacji o położeniu kursora.

Dla czytelników zainteresowanych problemem samodzielnej obsługi myszki gorąco polecam stare choć nadal aktualne prace [2] i [3] oraz znacznie nowszą [6]. Natomiast prace [4], [5] i [8] prezentują odmienne rozwiązania problemu zbliżonego do poruszonego w niniejszym artukule i są doskonałą ilustracją mnogości możliwych rozwiązań jednego zagadnienia.

Literatura:
[1] Norbert Kilen, "Z Turbo Pascalem w głąb systemu", Lynx-SFT, Warszawa 1994.
[2] "Turbo Pascal 6.0 - Turbo Vision = ... assembler", PCKurier 22/92, str. 154
[3] "Myszka raz jeszcze", PCKurier 1/93, srt. 131
[4] "Graficzny kursor myszy", PCKurier 8/94, str. 155
[5] "Kolorowy kursor i przerwania myszy", PCKurier 4/96, str. 84
[6] "Myszka - inaczej", PCKurier 7/96, str. 94
[7] "Wygodny edytor kursora myszy", PCKurier 20/96, str. 125
[8] "Szybka obsługa myszy", PCKurier 26/96, str. 132


Do pobrania


© Janusz Ganczarski
JanuszG@enter.net.pl