Grundsätzlich ist der Wheel-Maus-Support bereits
im Betriebssystem verankert. Es gibt im Input-Prefs-Einsteller eine Scrollrad-Übersetzung.
Damit kann der Anwender selber festlegen, wie oft die Bewegung des Mausrades ausgewertet
wird. So wird z.B. bei der Übersetzung 1 ein Text zeilenweise gescrollt,
bei der höchsten Übersetzung 8 hingegen sind es acht Zeilen am Stück,
die mit einem Mausrad-Step bewegt werden. Die Übersetzung 0 schaltet
hingegen die Mausrad-Unterstützung komplett ab. Wird allerdings eine Qualifier-Taste
(z.B. Umschalt oder Alt) gedrückt gehalten und das Mausrad bewegt, wird die
Übersetzung grundsätzlich auf 1 reduziert. So kann der Anwender bei
einer hohen Übersetzung jederzeit auf eine feine Bewegung wechseln.
Unterstützung im Betriebssystem
Listing 1: Ein zweites Mausrad mit der Strg-Taste
simulieren und abfragen.if(msg->Class == IDCMP_EXTENDEDMOUSE) {
if(imsg->Code == IMSGCODE_INTUIWHEELDATA) {
/* Mausrad-Unterstützung */
struct IntuiWheelData *data =
(struct IntuiWheelData *) imsg->IAddress;
if(data->Version == INTUIWHEELDATA_VERSION)
{
if(imsg->Qualifier & IEQUALIFIER_CONTROL)
{
/* gedrückte CTRL/STRG-Taste */
/* tauscht die Mausräder */
const WORD merk = data->WheelX;
data->WheelX = data->WheelY;
data->WheelY = merk;
}
/* ... Daten verarbeiten ... */
}
}
} | Auch
"Multiview" unterstützt bereits das Mausrad und rollt den Inhalt
nach oben und unten bzw. nach links und rechts, wenn man über ein zweites
Mausrad verfügt. Voraussetzung ist natürlich, dass der angezeigte Inhalt
größer ist, als der sichtbare Ausschnitt, der gerade angezeigt wird.
Auch das Texteditor-Gadget verfügt bereits über volle Mausrad-Kontrolle.
Beim Listview-Gadget sieht es zumindest im Moment noch nicht so gut aus und man
muss als Programmierer selber dafür sorgen, dass sich der Listeninhalt verschiebt,
wenn das Mausrad bewegt wird.In eigenen Programmen muss zusätzlich
das IDCMP-Flag IDCMP_EXTENDEDMOUSE beim Erstellen eines Intuition-Fensters gesetzt
werden. Nur dann wird das Programm auch über entsprechende Nachrichten versorgt.
Dabei wird im Codefeld der Nachricht der Define IMSGCODE_INTUIWHEELDATA gesetzt.
Das Adress-Feld verweist zu einer IntuiWheelData-Struktur, die in WheelX und WheelY
die Schrittweiten des ersten und zweiten Mausrades enthält. Kommt jedoch
die window.class zum Einsatz, um ein Fenster mit Reaction-Gadgets zu erstellen,
wird es etwas aufwändiger. Hier gibt es keine direkte Möglichkeit, die
Nachricht zu erhalten. Stattdessen muss ein so genannter Hook verwendet werden,
der die IDCMP-Nachrichten noch vor der window.class bekommt. Die beiden
Tags WINDOW_IDCMPHook und WINDOW_IDCMPHookBits sind beim Aufruf von NewObject()
anzugeben. Die meisten Mäuse verfügen nur über ein Mausrad. Im
neuen Betriebssystem ist vorgesehen mithilfe einer Taste (z.B. Strg) die beiden
Mausräder zu tauschen. Wenn die Strg-Taste gedrückt wird, könnte
damit ein zweites Mausrad simuliert werden. Listing 1 zeigt die vollständige
Behandlung der Intuition-Nachricht und die Abfrage der Strg-Taste. Wie man
sieht, sind nur wenige Codezeilen notwendig, um auch in eigenen Programmen das
Mausrad nicht ungenutzt zu lassen. Sinnvolle Einsatzgebiete gibt es sicher in
jedem Programm. Egal, ob es sich um einen längeren Text handelt oder um einen
Ausschnitt einer HTML-Seite, die gescrollt werden soll.
Das komplette
Beispiel mit dem Source-Code finden Sie auf der nächsten Heft-CD. lb |
|
Beispielprogramm: Im kleinen
Fenster wird die Stepweite des Mausrades für die X-und Y-Koordinate angezeigt. |
|