Fenster als Benutzerumgebung

Die Fensterfunktionen auf einen Blick:

▌wind_calc▌WIND_CAL.C▌   Fensterdimensionen berechnen.
▌wind_close▌WIND_CLO.C▌  Fenster schließen.
▌wind_create▌WIND_CRE.C▌ Fenster erzeugen.
▌wind_delete▌WIND_DEL.C▌ Fenster löschen.
▌wind_find▌WIND_FIN.C▌   Fensterhandle anhand einer Positionsangabe ermitteln.
▌wind_get▌WIND_GET.C▌    Eigenschaften eines Fensters ermitteln.
▌wind_open▌WIND_OPE.C▌   Fenster öffnen.
▌wind_set▌WIND_SET.C▌    Eigenschaften eines Fensters verändern.
▌wind_update▌WIND_UPD.C▌ Bildschirmoperationen sperren oder freigeben.

Aus der Sicht des Anwenders ist die Integration von Fenstern die wohl
herausragendste Eigenschaft des ▌GEM▌..\..\GEM▌-Betriebssystems. Die Maus ist
dabei die ideale Ergänzung für den Umgang mit Fenstern. Ein Fenster
besteht aus einer Reihe von bestimmten Einheiten, die entsprechend den
Anforderungen der ▌Applikation▌..\APPL\APPL.HLP▌ gesetzt werden können.

Im Mittelpunkt eines Fensters steht immer die Arbeitsfläche, auf der
ein bestimmtes Objekt, wie zum Beispiel ein Text oder eine Grafik,
ganz oder in Ausschnitten dargestellt wird. Die Titelleiste gibt dem
Fenster einen Namen, dient aber gleichzeitig auch zum Verschieben des
Fensters auf dem Bildschirm. Mit der Schließbox (links oben) kann das
Fenster geschlossen werden. Klickt man die Full-Box (rechts oben) an,
wird das eventuell verkleinerte Fenster auf seine volle Größe ge-
bracht. Die Informationszeile ist für kurze Mitteilungen an den Be-
nutzer gedacht. Mit den Pfeilen (auf und ab, links und rechts) erhält
ein Programm die Mitteilung, daß der Inhalt des Fensters in die ent-
sprechende Richtung verschoben werden soll. Die horizontalen und ver-
tikalen Schieber ermöglichen die absolute Positionierung der Arbeits-
fläche eines Fensters. Mit der Grö₧eneinstellungsbox (rechts unten)
können Sie ein Fenster zumeist stufenlos vergrö₧ern bzw. verkleinern.
Um ein Fenster anzulegen, muß es zuerst mit der Funktion ▌wind_create▌WIND_CRE.C▌
erzeugt werden. Beim Anlegen wird das Fenster im Speicher initiali-
siert. Es wird gleichzeitig festgelegt, aus welchen Bestandteilen sich
das Fenster zusammensetzen soll und welche maximale Größe das Fenster
einnehmen darf. Man kann zwar die Größe eines Fenster beim Öffnen mit
▌wind_open▌WIND_OPE.C▌ in beliebigen Schritten kleiner einstellen als beim Anlegen
mit ▌wind_create▌WIND_CRE.C▌, aber ▌GEM▌..\..\GEM▌ muß für seine Speicherbereichsverwaltung
genau wissen, wie groß das Fenster maximal werden kann. Geöffnete Fen-
ster können mit ▌wind_close▌WIND_CLO.C▌ wieder geschlossen werden. Sie sind damit
jedoch noch nicht aus dem Speicher entfernt worden und können mit
wind_open erneut aktiviert werden. Soll ein geschlossenes Fenster auch
aus dem Speicher entfernt werden, so geschieht dies mit der Funktion
▌wind_delete▌WIND_DEL.C▌. Mit Hilfe der Funktion ▌wind_get▌WIND_GET.C▌ lassen sich aktuelle
Einstellungen eines Fensters jederzeit abfragen. So erhält man Infor-
mationen über die Position, die Größe, die verwendeten Fensterbestand-
teile, usw. Besonders wichtig ist meist die Stellung der horizontalen
und vertikalen Schieber. In umgekehrter Weise, kann man einzelne
Parameter eines Fensters mit Hilfe der Funktion ▌wind_set▌WIND_SET.C▌ auch direkt
vom Programm aus festlegen. Die meisten Veränderungen in den Fenstern
werden jedoch automatisch vom Bildschirmmanager überwacht. Wenn der
Anwender bestimmte Schlüsselbereiche anklickt, sendet der Bildschirm-
manager sofort eine Mitteilung an das Programm, das mit Hilfe der
Ereignisverwaltung sofort die richtigen Aktionen in die Wege leiten
kann. Im Endeffekt liegt die gesamte Verantwortung für die Verwaltung
der Fenster beim Anwenderprogramm.
Wenn man den Fensterinhalt verändern will, sollte man zuvor mit der
Funktion ▌wind_update▌WIND_UPD.C▌ alle anderen Bildschirmoperationen verbieten.
Ansonsten könnte es passieren, da₧ eine andere Applikation zur selben
Zeit wie Sie den Bildschirm restaurieren will, und es entsteht Bild-
schirmsalat. Man darf aber nicht vergessen, den Bildschirm anschlie-
ßend erneut mit der Funktion ▌wind_update▌WIND_UPD.C▌ für weitere Bildschirm-
operationen wieder frei zugeben, da ansonsten auch alle Menüs und
Accessories ausgeschaltet blieben.
