Freigeben über


Was ist ein Fenster?

Was ist ein Fenster?

Offensichtlich sind Fenster für Windows von zentraler Bedeutung. Sie sind so wichtig, dass sie das Betriebssystem nach ihnen benannt haben. Aber was ist ein Fenster? Wenn Sie an ein Fenster denken, denken Sie wahrscheinlich an folgendes:

Screenshot eines Anwendungsfensters

Dieser Fenstertyp wird als Anwendungsfenster oder Standard Fenster bezeichnet. Es verfügt in der Regel über einen Frame mit einer Titelleiste, den Schaltflächen Minimieren und Maximieren sowie anderen Standardmäßigen UI-Elementen. Der Frame wird als Nicht-Clientbereich des Fensters bezeichnet, da das Betriebssystem diesen Teil des Fensters verwaltet. Der Bereich innerhalb des Frames ist der Clientbereich. Dies ist der Teil des Fensters, den Ihr Programm verwaltet.

Hier sehen Sie einen anderen Fenstertyp:

Screenshot eines Steuerelementfensters

Wenn Sie noch nicht mit der Windows-Programmierung sind, kann es Sie überraschen, dass Benutzeroberflächensteuerelemente, z. B. Schaltflächen und Bearbeitungsfelder, selbst Fenster sind. Der Hauptunterschied zwischen einem Ui-Steuerelement und einem Anwendungsfenster besteht darin, dass ein Steuerelement nicht von selbst vorhanden ist. Stattdessen wird das Steuerelement relativ zum Anwendungsfenster positioniert. Wenn Sie das Anwendungsfenster ziehen, wird das Steuerelement erwartungsgemäß mit dem Steuerelement verschoben. Außerdem können das Steuerelement und das Anwendungsfenster miteinander kommunizieren. (Beispielsweise empfängt das Anwendungsfenster Klickbenachrichtigungen von einer Schaltfläche.)

Denken Sie daher nicht einfach an das Anwendungsfenster, wenn Sie fenster denken. Stellen Sie sich stattdessen ein Fenster als Programmierkonstrukt vor, das:

  • Belegt einen bestimmten Teil des Bildschirms.
  • Kann zu einem bestimmten Zeitpunkt sichtbar sein oder nicht.
  • Weiß, wie man sich selbst zeichnet.
  • Reagiert auf Ereignisse des Benutzers oder des Betriebssystems.

Übergeordnetes Fenster und Besitzerfenster

Im Fall eines UI-Steuerelements wird das Steuerelementfenster als untergeordnetes Element des Anwendungsfensters bezeichnet. Das Anwendungsfenster ist das übergeordnete Element des Steuerelementfensters. Das übergeordnete Fenster stellt das Koordinatensystem bereit, das zum Positionieren eines untergeordneten Fensters verwendet wird. Ein übergeordnetes Fenster wirkt sich auf Aspekte der Darstellung eines Fensters aus. Beispielsweise wird ein untergeordnetes Fenster abgeschnitten, sodass kein Teil des untergeordneten Fensters außerhalb der Rahmen des übergeordneten Fensters angezeigt werden kann.

Eine weitere Beziehung ist die Beziehung zwischen einem Anwendungsfenster und einem modalem Dialogfeld. Wenn eine Anwendung ein modales Dialogfeld anzeigt, ist das Anwendungsfenster das Besitzerfenster , und das Dialogfeld ist ein eigenes Fenster. Ein eigenes Fenster wird immer vor dem Besitzerfenster angezeigt. Es wird ausgeblendet, wenn der Besitzer minimiert wird, und wird gleichzeitig mit dem Besitzer zerstört.

Die folgende Abbildung zeigt eine Anwendung, die ein Dialogfeld mit zwei Schaltflächen anzeigt:

Screenshot einer Anwendung mit einem Dialogfeld

Das Anwendungsfenster besitzt das Dialogfeld, und das Dialogfeld ist das übergeordnete Element beider Schaltflächenfenster. Das folgende Diagramm zeigt diese Beziehungen:

Abbildung: Beziehungen zwischen übergeordnetem/untergeordnetem Element und Besitzer/Besitzer

Fensterhandles

Windows sind Objekte – sie verfügen sowohl über Code als auch über Daten –, aber sie sind keine C++-Klassen. Stattdessen verweist ein Programm mithilfe eines Werts, der als Handle bezeichnet wird, auf ein Fenster. Ein Handle ist ein undurchsichtiger Typ. Im Wesentlichen handelt es sich nur um eine Zahl, die das Betriebssystem verwendet, um ein Objekt zu identifizieren. Sie können sich Windows mit einer großen Tabelle aller erstellten Fenster ausbilden. Es verwendet diese Tabelle, um Fenster anhand ihrer Ziehpunkte nachzuschlagen. (Ob es intern genau so funktioniert, ist nicht wichtig.) Der Datentyp für Fensterhandles ist HWND, der normalerweise als "aitch-wind" bezeichnet wird. Fensterhandles werden von den Funktionen zurückgegeben, die Fenster erstellen: CreateWindow und CreateWindowEx.

Um einen Vorgang für ein Fenster auszuführen, rufen Sie in der Regel eine Funktion auf, die einen HWND-Wert als Parameter akzeptiert. Um beispielsweise ein Fenster auf dem Bildschirm neu zu positionieren, rufen Sie die MoveWindow-Funktion auf:

BOOL MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint);

Der erste Parameter ist das Handle für das Fenster, das Sie verschieben möchten. Die anderen Parameter geben die neue Position des Fensters an und geben an, ob das Fenster neu gezeichnet werden soll.

Beachten Sie, dass Handles keine Zeiger sind. Wenn hwnd eine Variable ist, die ein Handle enthält, ist der Versuch, das Handle durch Schreiben *hwnd zu dereferenzieren, ein Fehler.

Bildschirm- und Fensterkoordinaten

Koordinaten werden in geräteunabhängigen Pixeln gemessen. Wir werden mehr über den geräteunabhängigen Teil geräteunabhängiger Pixel zu sagen haben, wenn wir über Grafiken sprechen.

Abhängig von Ihrer Aufgabe können Sie Koordinaten relativ zum Bildschirm, relativ zu einem Fenster (einschließlich des Frames) oder relativ zum Clientbereich eines Fensters messen. Beispielsweise würden Sie ein Fenster auf dem Bildschirm mithilfe von Bildschirmkoordinaten positionieren, aber Sie würden innerhalb eines Fensters mit Clientkoordinaten zeichnen. In jedem Fall ist der Ursprung (0, 0) immer die obere linke Ecke des Bereichs.

Abbildung mit Bildschirm-, Fenster- und Clientkoordinaten

Nächste

WinMain: Der Anwendungseinstiegspunkt