# Fenster (Computer)

Ein Fenster ist in der Informatik ein fast immer rechteckiger Bestandteil eines Fenstersystems. Darunter wird meist das Element verstanden, das vom Benutzer in Größe und Platzierung auf dem Bildschirm verändert werden kann. Programme können in einem Fenster dargestellt werden, und Dateien können in Fenstern erstellt und editiert werden.

## Begriff

ISO 9241 definiert ein Fenster als „unabhängig steuerbaren Bildschirmbereich, welcher dazu verwendet wird, Objekte darzustellen und/oder einen Dialog mit dem Benutzer auszuführen“. Zusätzlich unterscheidet die Norm zwischen Primärfenstern und Sekundärfenstern. Primärfenster stellen das Betriebssystem, Programme oder Objekte dar. Sekundärfenster hingegen entstehen aus Interaktionen eines Benutzers mit Primärfenstern oder werden vom Betriebssystem aufgerufen und führen einen Dialog mit dem Benutzer durch.

## Fenster als Metapher

In der über viele Jahre üblichen Schreibtischmetapher der grafischen Benutzeroberfläche (GUI), die die intuitiven Gewohnheiten der Papierarbeit umsetzt, vertritt das Fenster das einzelne Blatt Papier auf dem „darunterliegenden“ Desktop (‚Schreibtisch, Arbeitsfläche‘), daher sollen sich Fenster verschieben, anordnen, stapeln, sortieren, obenauf legen oder ganz beiseiteschieben lassen, und dabei übersichtlich bleiben. Gedanklich „schweben“ Fenster im Allgemeinen über dem Bildschirmhintergrund (Desktop) und können sich überlappen oder gänzlich überdecken, sowie wahlweise auf Vollbild vergrößern (maximieren □), sowieso gänzlich weglegen (minimieren _) und wieder zurückzuholen (wiederherstellen).
Häufig wird statt des Wortes Fenster auch die englische Originalbezeichnung Window verwendet. Diese geht zurück auf das in den frühen 1970er Jahren im Xerox PARC entwickelte WIMP-Paradigma (Window, Icon, Menu, Pointer) für den Aufbau von Benutzerschnittstellen als Desktop-Umgebung, die die alten textorientierten Benutzerschnittstellen (TUI) ersetzen sollte.
Der Ausdruck Fenster selbst ist eine an das Bauelement Fenster angelehnter metaphorischer Ausdruck. Er soll ausdrücken, dass seine Funktion über die eines Papierblatts weit hinausgeht, und eine Interaktionsfläche zu einem Programm ist. Präziser ist das eigentliche Fenster der Fensterrahmen, der auf seiner Fensterfläche (dem „Inhalt“) den Blick auf die eigentliche Arbeitsfläche des Programms öffnet, und auf dem Rahmen den Platz für Bedienelemente und Informationen bietet, systemübergreifende wie anwendungsspezifische.

## Entwicklung

Die Darstellungstechnik mit Fenstern (zusammen mit anderen Elementen der grafischen Oberflächen) wurde noch vor Microsofts Einführung der Windows-Betriebssysteme (ursprünglich mit Windows 1.0 ein grafischer Aufsatz für PC-kompatibles DOS gegen Ende November 1985) in Geräten von Apple, namentlich dem Apple Lisa, ab 1983 eingesetzt. Sie gab es ab 1985 auch auf Atari-Rechnern wie den Atari-ST-Heimcomputern und mit der Workbench 1.0 auf dem Amiga 1000.
Die Fenstermetapher war so erfolgreich, dass die textbasierten Oberflächen, auch wenn sie bis heute insbesondere in der Unix/Linux-Welt für Systemarbeiten noch verwendet werden (Kommandozeile), sehr schnell als völlig antiquiert verdrängt wurden. Den meisten textgesteuerten Programmen wurde eine fenstertaugliche graphische Oberfläche ergänzt, einschließlich Konsole oder Terminal selbst, die in Fenstern aufgerufen werden. Die Fenstermetapher wurde dann so dominant, dass auch das Webdesign mehrere Jahrzehnte ganz diesem Schema – Steuerelemente am Rahmen und der eigentliche Inhalt im Fenster – folgte (Frame-Technologie), auch hier galten rein textliche Webseiten ziemlich schnell als altertümlich anmutend. Möglich wurde das durch Skriptsprachen für Webanwendungen.
Durch die Smartphones und Tabletcomputer wird die Fenstermetapher ab Mitte der 2010er zunehmend von einem völlig neuen Oberflächenkonzept abgelöst, das wegen der Kleinheit auf permanentem Vollbildschirmbetrieb beruht, wo die Anwendungen durch Wischbewegungen, die durch die Touchscreens möglich wurden, aus dem Fokus geschoben werden. Der Begriff des Fensters wie des darunterliegenden Desktops spielt hier keine bildhafte Rolle mehr.

## Fenster-Technik

Der Fenstermanager integriert die Benutzeroberflächen (Schnittstellen) von einzelnen Programmen in die Fenster, und diese in die Gesamtoberfläche des Betriebssystems. Meist gibt es zusätzlich Möglichkeiten, Fenster zu vergrößern und zu verkleinern („ziehen“, am oberen ⇕ oder seitlichen ⇔ Rand oder über die Ecke), und für Tastatureingaben zu fokussieren (aktives Fenster, die inaktiven Fenster werden dabei etwas ausgegraut), oder ihre Reihenfolge zu ändern (Z-Ordnung, flächendeckend nebeneinander – Tiling, und ähnliches).
In manchen Bereichen (insbesondere bei Windows-Programmierschnittstellen) werden alle Elemente der grafischen Benutzeroberfläche als Fenster betrachtet, also auch kleine Schalt- und Einstellungsflächen, Textfelder etc. Eine Form davon bilden auch die Dialogfenster oder Dialogboxen. Üblicherweise werden aber nur die „größten“ dieser Elemente, die auch durch den Benutzer frei platziert werden können, als Fenster bezeichnet. Der technische Begriff für diese „richtigen“ Fenster lautet je nach Programmierschnittstelle Dialog, Frame oder Top Level Window (‚Fenster der obersten [technologischen] Ebene‘, nämlich der Anwendungssoftware, nicht dem Betriebssystem-Interface). Zusätzlich entwickelte sich die Technologie der Pop-up-Fenster für kurzfristige Benachrichtigungen und wichtige Erledigungen.
Seit der Einführung von vereinfachten Verfahren zur Verwendung und effizienten Darstellung von stellenweise transparenten Bildinhalten finden bei einigen Softwareprodukten auch Fenster mit nicht-rechteckigen, freien Umrissen Verwendung. Diesen liegt meist ebenfalls eine rechteckige Form zugrunde, die aber transparente Randzonen und Aussparungen enthalten kann. Durch Verwendung von Alpha Blending können Fenster darüber hinaus mehr oder weniger durchscheinend gestaltet werden, sodass dahinter befindliche Inhalte sichtbar bleiben.

## Fensterelemente und Handhabung

Ein Fenster besteht aus einem inneren, rechteckigen Bereich, dessen Darstellung von dem jeweiligen Programm bewerkstelligt wird, und umrandenden Dekorationen, die vom Fenstermanager dargestellt werden. Zu letzteren zählen insbesondere die Fensterumrandung und der am oberen Rand befindliche Titelbalken, der neben dem Titel im Allgemeinen auch Schaltflächen enthält.
Die Schaltflächen der Titelleiste unterscheiden sich je nach System in Funktion und Aussehen oder sind fallweise in bestimmtem Ausmaß konfigurierbar, üblich sind jedoch mindestens die folgenden Funktionen:
* Schließen des Fensters bzw. Beenden des zugehörigen Anwendungsprogramms
* Maximieren des Fensters, sodass es den kompletten Desktop ausfüllt, bzw. Wiederherstellen der ursprünglichen Größe eines maximierten Fensters. macOS stellt stattdessen eine Zoom-Funktion zur Verfügung, die die Größe des Fensters zu einer durch den Benutzer festgelegten Standardgröße hin ändert.
* Minimieren des Fensters. Das Fenster wird damit versteckt und nur noch durch ein Icon auf dem Desktop oder einen Eintrag in der Taskleiste repräsentiert. Der Ausdruck minimieren ist hier also eigentlich falsch, da das Fenster ja nicht – wie das Wort nahelegt – minimiert, also auf die kleinstmögliche Größe gebracht, sondern gänzlich ausgeblendet wird.
Weitere Elemente:
* Unterhalb der Titelleiste gibt es in der Regel ein Menüleiste mit je nach geöffnetem Programm spezifischen Funktionen, Menü.
* Am unteren Ende des Fensters befindet sich je nach Art oder gewähltem Ansichtsmodus des Fensters eine Statusleiste, die entweder bestimmte Informationen zum geöffneten Element (Programm, Datei, …) oder Schaltflächen für bestimmte Funktionen enthält.
* Wenn auf dem Bildschirm nicht der gesamte Inhalt des Fensters dargestellt ist, wird in der Regel am rechten und/oder unteren Fensterrand eine Bildlaufleiste (auch Scrollbalken genannt) sichtbar, die es ermöglicht, durch Scrollen die nicht sichtbaren Teile eines Fensters anzusteuern.
* Wenn Grafik-Beschleunigungsfunktionen vorhanden sind, erzeugt oft ein Fensterschatten (zusätzlichen) Kontrast und Räumlichkeit, was auch viele Fenster an gleicher Stelle einfacher erkennen lässt.
* In manchen Betriebssystemen, etwa in späteren Versionen von klassischem Mac OS oder auf modernen Desktop-Umgebungen Unix-artiger Systeme, lassen sich Fenster „hochrollen“, sodass die Titelleiste ohne den Inhalt sichtbar bleibt.
Innerhalb eines Fenster stellt das Programm typischerweise Bedienelemente (Menüs und Schaltflächen) dar.
Sind mehrere Fenster gleichzeitig geöffnet, kann der Nutzer in der Regel mittels Auswahl mit der Maus oder durch bestimmte Tastenkombinationen zwischen den einzelnen Fenstern wechseln. Auf den gängigen Desktop-Betriebssystemen von Microsoft (PC) und Apple (Mac), Windows und macOS, handelt es sich um die Kombination
* Alt+Tab für den Wechsel zwischen laufenden Programmen (vorwärts)
* Alt+Umschalt+Tab für den Wechsel zwischen laufenden Programmen (rückwärts)
Bei vielen Computerspielen und Mediaplayern ist das nicht möglich, wenn die betreffenden Programme im Vollbildmodus laufen.
Bei mehreren geöffneten Fenstern kann immer nur eines die mittels Tastatur eingegebenen Befehle erhalten. Dieses wird als „aktives Fenster“ bezeichnet. Es ist in der Regel daran erkenntlich, dass seine Titelleiste – sofern der Benutzer nicht selbst eine andere Einstellung wählt – in einer Farbe erscheint, während sie bei inaktiven Fenstern in einem Grauton gehalten ist.
Um die Übersichtlichkeit zu erhöhen, lassen sich die Fenster in ihren Elementen vielfach konfigurieren, was Größen und Farben betrifft, diese sind üblicherweise in ein einheitliches Schema, die Skin eingebunden. Die Fensterdekoration kann entweder von dem Fenstermanager produziert werden oder vom Klienten (etwa X11 resp. Wayland). Der Fensterinhalt ist stets die Domäne des Klienten.
Auch das Fensterverhalten lässt sich vielfach steuern, beispielsweise, wie und wo sich neue Fenster öffnen, oder wie sie auf den Fokus des Mauszeigers reagieren, zum Beispiel Aktivierung durch Doppelklick, einfachen Klick oder Hovern.

## Programmierung
### C#

Das folgende Beispiel in der Programmiersprache C# zeigt die Implementierung eines Hauptfensters mit einer Menüleiste, die Menüs und ein Untermenü beinhaltet. Das Klick-Ereignis der Menüelemente des Untermenüs ist mit einer Ereignisbehandlungsroutine verknüpft, die ein neues Fenster als modaler Dialog öffnet (siehe Ereignis).