Previous PageIndexList Of FiguresList Of TablesNext Page

1 WINDOWSELEMENTE

In diesem ersten Kapitel wollen wir Ihnen die Elemente einer Windows-Anwendung zeigen, wie sie der Benutzer zu Gesicht bekommt, und Begriffe erläutern, die sich für den Programmierer hinter diesen Elementen verbergen.

1.1 Das Windows-Konzept

Die Idee, Computer durch eine grafische Benutzeroberfläche zu bedienen, ist bereits recht alt. Aufgrund der zu teueren bzw. nicht ausreichenden Rechnerleistungen konnte sie sich jedoch erst zu Beginn der 80er Jahre mit Einführung des Apple Macintosh durchsetzen. Die große Gemeinde der PC-Besitzer kam erst in den letzten Jahren in den Genuß der einfachen und schnell zu erlernenden Bedienungsoberfläche. Wenn man von den älteren Windows-Versionen und GEM absieht, begann der eigentliche Boom mit der Einführung der Windows-Version 3.0 im Jahre 1990. Eine nochmalige Verbesserung brachte schließlich die Version 3.1 mit sich. Als weiteres zukunftsträchtiges Produkt kam 1993 schließlich Windows NT hinzu. Der teilweise überraschende Erfolg von Windows hat zu einer starken Nachfrage nach Windows-Programmen geführt, so daß es sich heute kaum ein Softwarehaus leisten kann, keine Programme für diese Benutzeroberfläche anzubieten. Wenn man nun eine Programmiersprache wählen soll, mit der man Windows-Programme erstellen will, kommt man unweigerlich zu C. Die Programmiersprache C ist nicht irgendeine Sprache, sondern diejenige, in der Windows selbst geschrieben wurde. Wenn man also zukunftssicher und so systemnah wie möglich programmieren möchte oder muß, ist C als Programmiersprache die beste Wahl.
Wenn Sie früher für MS-DOS Programme geschrieben haben, müssen Sie sich bei der Windows-Programmierung mit einigen neuen Ideen auseinandersetzen. Drei der wichtigsten Änderungen sind folgende: Erstens müssen sich alle Programme den Bildschirm teilen, zweitens steht einem Programm nicht die gesamte Rechenzeit zur Verfügung, und drittens muß sich das Programm den Speicher mit anderen Programmen teilen. Damit das funktioniert, muß Windows eine sehr viel größere Kontrolle über die Programme ausüben, als das zum Beispiel MS-DOS getan hat. Für den Programmierer bedeutet ein Einstieg in die Windows-Programmierung neben dem Erlernen einer ganzen Reihe von neuen Funktionen auch eine grundsätzlich andere Denkweise. Nicht mehr das Programm - und damit der Programmierer - gibt vor, was in welcher Reihenfolge innerhalb einer Anwendung zu geschehen hat. Bei einem Windows-Programm legt der Anwender in weitem Rahmen selber fest, in welcher Reihenfolge einzelne Funktionen angewählt werden. Der Programmierer muß daher mehr die Vorstellung des Anwenders über richtige Arbeitsabläufe im Auge haben, als seine eigenen. Diese Erkenntnis mag sich noch trivial anhören, bei der Programmentwicklung hat sie aber eine ganze Reihe von tiefgreifenden Konsequenzen. Um diese zu verstehen, sehen wir uns in den nächsten beiden Kapitel die beiden wichtigsten Begriffe in der Windows-Programmierung an, das Fenster und die Nachricht.

1.2 Fenster

Alles was man mit Windows machen kann, spielt sich in Fenstern ab. In diese Fenster gibt der Anwender Informationen in das System ein und erhält sie auch wieder zurück. Bild 1.1 zeigt ein typisches Fenster mit seinen Bedienungselementen.

Bild 1.1: Fenster
Aus der Sicht des Programmierers kann man ein Fenster in zwei Bereiche einteilen:
Erstens den Rahmen mit Menü-, Titel- oder Bildlaufleisten (der Begriff Rahmen bezieht sich auf alles, was nicht Fensterinhalt ist), der von Windows verwaltet wird und um den sich der Programmierer nur wenig kümmern muß. Das bedeutet, daß beispielsweise das Vergrößern und Verkleinern des Fensters ohne Zutun des Programmierers abläuft. Auch das Öffnen und Schließen von Menüs funktioniert, ohne daß man sich selber darum kümmern muß. Schließlich sorgt Windows auch noch dafür, daß ein Fenster, das den Eingabefokus besitzt, entsprechend hervorgehoben dargestellt wird. Der Begriff Eingabefokus besagt, daß dieses Fenster das aktive Fenster ist. Alle momentanen Aktionen beziehen sich auf dieses Fenster. Das aktive Fenster liegt normalerweise über allen anderen Fenstern und ist zusätzlich optisch hervorgehoben. Bild 1.2 zeigt mehrere inaktive und ein aktives Fenster.

Bild 1.2: Aktives Fenster
Zweiter Bereich ist der eigentlichen Fensterinhalt (engl.: client area); er bereitet dem Programmierer die meisten Kopfschmerzen. Dieser Teil wird vom Programm verwaltet. Es muß daher dafür sorgen, daß der Inhalt immer korrekt dargestellt wird. Und das ist gar nicht so einfach. Wenn Sie bisher DOS-Programme entwickelt haben, konnten Sie sich darauf verlassen, daß etwas, was auf dem Bildschirm ausgegeben wurde, sichtbar blieb, bis es wieder gelöscht wurde. Bei Windows ist das ganz anders. Windows kümmert sich nämlich nicht darum, daß der Inhalt eines Fensters erhalten bleibt, wenn es von einem anderen Fenster verdeckt wird. Wird das oben liegende Fenster wieder geschlossen oder zur Seite geschoben, zeichnet Windows den Rahmen (Titel, Menü, Bildlaufleiste) neu. Den Inhalt des Fensters muß die Anwendung selbst neu ausgeben. Diesen Effekt kann man besonders deutlich wahrnehmen, wenn man mit einem Zeichenprogramm arbeitet. War dessen Fenster verdeckt und wird es dann wieder sichtbar, so kann man sehr deutlich sehen, daß die Anwendung selber den Fensterinhalt neu aufbaut, was unter Umständen auch recht lange dauern kann.
Damit das Programm merkt, daß der Fensterinhalt oder Teile davon nicht mehr gültig sind und neu ausgegeben werden müssen, sendet Windows eine entsprechende Nachricht an das Fenster. Welche Bedeutung Nachrichten im Windows-System haben, erfahren Sie im folgenden Kapitel.

1.3 Nachrichten

Mit Hilfe von Nachrichten (engl.: messages) werden die Informationen von Windows an ein Fenster weitergeleitet. Dabei wird für jedes nur denkbare Ereignis eine Nachricht erzeugt. Das kann zum Beispiel das Drücken einer Taste, die Bewegung der Maus oder das Auswählen eines Menübefehls sein. Windows kennt einige hundert unterschiedliche Nachrichten und zusätzlich kann der Programmierer eigene definieren. Zum Verteilen an den entsprechenden Empfänger werden sie erst einmal in Warteschlangen eingestellt und von dort weitergeleitet.
Programmtechnisch ist eine Nachricht eine Struktur vom Typ MSG , die den folgenden Aufbau hat:

typedef struct
{
    HWND     hwnd;
    UINT     message;
    WPARAM   wParam;
    LPARAM   lParam;
    DWORD    time;
    POINT    pt;
} MSG;

Im einzelnen haben die Variablen in der Struktur folgende Aufgaben:
hwnd ist die Kennziffer des Fensters, an das die Nachricht gerichtet ist. Statt Kennziffer verwendet man auch die Begriffe Bezug oder Handle für diesen Wert.
message ist die Nummer der Nachricht. Es können Werte zwischen 0 und 65535 auftreten. Die Werte bis 1023 werden dabei vom Windows-System genutzt. So bedeutet zum Beispiel die Nachricht 514 (0202hex) , daß der Benutzer die linke Maustaste losgelassen hat. Damit der Programmierer nicht solche nichtssagenden Zahlen benutzen muß, sind diese Konstanten in der Datei windows.h mit sprechenden Namen versehen worden. Diese Nachricht ist zum Beispiel so definiert:
#define WM_LBUTTONUP 0x0202
Das heißt nichts anderes, als daß man den Wert 514 (0202hex) im Programm mit WM_LBUTTONUP ansprechen kann. Die Konstanten für Nachrichten von Windows fangen im übrigen alle mit WM_ an, was soviel wie Windows Message bedeuten soll.
wParam und lParam sind zwei Werte, die je nach Nachricht unterschiedliche Bedeutung haben und die Nachricht genauer spezifizieren.
time gibt die Uhrzeit der Nachricht an.
pt enthält die Mausposition zum Zeitpunkt der Nachrichtenerzeugung.
Wie erfolgt nun programmtechnisch die Übergabe der Struktur MSG, also der Nachricht? Ganz einfach! Windows ruft eine Funktion in Ihrem Programm auf und übergibt dieser Funktion die Nachricht als Parameter. Bei dieser Funktion handelt es sich um die sogenannte Fensterfunktion, die alle Meldungen, die an dieses Fenster gehen, entgegennimmt und entsprechende Reaktionen veranlaßt. Diese Tatsache ist auch schon eines der wesentlichen Konzepte der Windows-Programmierung, das man verstanden haben muß! Im Gegensatz zu normalen C-Programmen braucht ein Windows-Programm neben der Hauptfunktion mindestens noch eine zweite Funktion, nämlich die Fensterfunktion.

1.4 Dialogfelder und deren Bestandteile

Um Daten vom Benutzer entgegenzunehmen oder Meldungen auszugeben werden unter Windows Dialog- und Meldungsfelder benutzt. Für den Programmierer sind diese Felder nichts anderes als Fenster, wenn auch mit besonderen Eigenschaften. Für die verschiedenen Aufgaben stehen unterschiedliche Arten von Dialog- und Meldungsfeldern zur Verfügung.
Die für den Programmierer einfachste Form stellen Meldungsfelder dar, wie in Bild 1.3 zu sehen.

Bild 1.3: Meldungsfelder
Die Tätigkeit des Benutzers beschränkt sich hier darauf, entweder die Meldung zu bestätigen oder abzubrechen. Meldungsfelder werden verwendet, um dem Benutzer die Durchführung einer Aktion zu bestätigen, oder sie dienen als Sicherheitsabfrage beim Löschen oder Überschreiben von Dateien.
Bei einem Dialogfeld erwartet Windows vom Benutzer eine Eingabe oder die Auswahl von Optionen. Typischerweise werden Dialogfelder dann eingesetzt, wenn eine Befehlsauswahl über das Menü nicht mehr ausreicht und zusätzliche Informationen vom Benutzer benötigt werden. Menübefehle, hinter denen sich Dialogfelder verbergen, werden durch drei Auslassungspunkte (...) hinter dem Befehl gekennzeichnet. Dialogfelder werden zum Beispiel für die Eingabe von Dateinamen, die Auswahl von Zeichensätzen und Bildschirmfarben oder ähnlichem benutzt. In einem Dialogfeld können verschiedene standardisierte Objekte erscheinen. Bild 1.4 zeigt die wichtigsten dieser Kontrollelemente:

Bild 1.4: Wichtige Kontrollelemente
Dialog- und Meldungsfelder können in zwei unterschiedlichen Arten vorkommen. Zum einen in der modalen (siehe Bild 1.5) und zum anderen in der nicht modalen Form (siehe Bild 1.6).

Bild 1.5: Modales Dialogfeld
Modale Felder sind Felder, auf die der Benutzer auf jeden Fall reagieren muß. Das heißt, er kann so lange nicht weiterarbeiten, bis er das Feld geschlossen hat. Nichtmodale Felder hingegen erlauben es dem Benutzer, in der Anwendung weiterzuarbeiten, während das Feld geöffnet bleibt. In Bild 1.6 sehen Sie das Dialogfeld von WinWord für die Rechtschreibung. Es erlaubt das Arbeiten im Text und das Zurückkehren in die Dialogbox, ohne daß man den Menüpunkt für die Rechtschreibeprüfung erneut aufrufen müßte.

Bild 1.6: Nicht modales Dialogfeld
Für den Programmierer sind modale Felder einfacher zu erstellen. In diesem Fall muß er sich nicht darum kümmern, welche Auswirkungen das Wechseln zwischen Anwendung und Dialogfeld hat. Für den Anwender hingegen sind nichtmodale Felder häufig angenehmer zu bedienen.
Bei den modalen Feldern gibt es noch eine weitere Unterteilung. Bei einem normalen modalen Feld kann der Benutzer zwar in der Anwendung, zu der das Feld gehört, nicht mehr arbeiten. Wenn er jedoch zu einer anderen Anwendung umschaltet, kann er dort durchaus arbeiten. Es gibt jedoch Umstände, bei denen ein Umschalten zu einer Anwendung nicht erlaubt werden kann. Das kann zum Beispiel ein Windows-interner Fehler sein. In diesem Fall verwendet man sogenannte systemmodale Felder, die das ganze System sperren, bis der Benutzer reagiert hat.
Zum Entwerfen von Dialogfeldern bieten alle Hersteller entsprechende Werkzeuge an. Mit ihnen kann man am Bildschirm die einzelnen Elemente der Dialogbox positionieren oder in der Größe verändern. Weitere Informationen zu der Erstellung von Dialogen finden Sie im dritten Kapitel.
Viele Dialogboxen haben häufig wiederkehrenden Aufgaben. Dazu gehört zum Beispiel der Dialog zum Laden (siehe Bild 1.7) oder der Dialog zum Speichern von Dateien. Um dem Programmierer an dieser Stelle Arbeit abzunehmen, und um vor allem dem Anwender eine möglichst einheitliche Bedienung aller Windows-Programme zu erlauben, wurde mit der Version 3.1 eine Gruppe von acht Standarddialogen zum Bestandteil des SDK (Software Development Kit). Es handelt sich dabei u.a. um Dialoge zum Öffnen und Schließen von Dateien.

Bild 1.7: Standard-Dialogfeld (Common Dialog Box)
Bei der Entwicklung von Programmen sollte sich der Programmierer, wann immer es möglich ist, dieser Dialoge bedienen. Die konsequente Benutzung dieser standardisierten Dialogfelder kann dem Anwender die Arbeit erheblich vereinfachen. Damit die Dialogfelder benutzt werden können, muß im Windows-Verzeichnis SYSTEM die Datei COMMDLG.DLL vorhanden sein. Eine eingehende Bescheibung dieser Standarddialoge finden Sie in Kapitel 6.3.

1.5 Menüs und Befehle

Befehle werden einem Windows-Programm häufig über Menüs gegeben (siehe Bild 1.8). In der Menüleiste sind die Befehle zu Gruppen wie zum Beispiel Datei, Bearbeiten oder Hilfe bzw. ? zusammengefaßt. Die Reihenfolge der Menüpunkte in der Leiste ist grundsätzlich frei wählbar. Sie sollten sich jedoch an die übliche Reihenfolge halten, um dem Anwender die Einarbeitung in das Programm nicht unnötig zu erschweren.

Bild 1.8: Menüleiste
Wählt man diese Begriffe aus, wird in der Regel ein Fenster (engl.: Popup) (Bild 1.9) aufgeschlagen, in dem man die gewünschte Aktion auswählt.

Bild 1.9: Menü
Sie als Programmierer haben mit dem Öffnen der Menüs, dem Bewegen der Markierung innerhalb der Menüs und der Auswahl der Befehle nichts zu tun. Das Programm bekommt von Windows die Nummer des gewählten Befehls geliefert und kann dann entsprechend reagieren. Die Kennziffer eines jeden Menüpunktes haben Sie vorher bei der Zusammenstellung der Menüzeile festgelegt.
In den letzten Jahren ist in vielen Programmen noch eine sogenannte Symbolleiste (siehe Bild 1.8) zur Menüleiste hinzugekommen. Mit Hilfe dieser Symbole können Befehle direkt gewählt werden, ohne daß man Menüs über mehrere Schritte öffnen müßte. Für den Benutzer bedeutet das einen gesteigerten Bedienungskomfort.
Weitere Informationen zu den Menüs finden Sie im dritten Kapitel.

1.6 Icon, Cursor und Caret

Icon
Wird eine Anwendung im Programm-Manager dargestellt, oder ist sie auf Symbolgröße verkleinert, so wird sie in Form eines kleinen Bildes dargestellt. Dieses Icon bzw. Symbol hilft dabei, ein Programm optisch zu identifizieren. Bis auf wenige Ausnahmen, wie zum Beispiel der Taskmanager, haben alle Windows-Programme mindestens ein Symbol. Dieses Symbol ist in der Programmdatei selbst gespeichert. Bild 1.10 zeigt beispielhaft die vier Symbole, die im Dateimanager von Windows 3.1 enthalten sind.

Bild 1.10: Symbole des Dateimanagers
Icons werden mit einem speziellen Malprogramm erstellt und mit der Dateiendung ICO abgespeichert. Die Größe eines Icons beträgt dabei für einen VGA-Bildschirm 32 mal 32 Bildpunkte. Da sie im fertigen Windows-Programm immer an einer definierten Stelle zu finden sind, ist es möglich, sie mit entsprechenden Hilfsprogrammen anzuzeigen oder sogar nachträglich zu verändern.
Zur optischen Darstellung der Programme haben die Anwender neben den Symbolen, die in den Programmen selbst gespeichert sind, noch eine große Auswahl an Bildern im Programm-Manager. Sollte auch das nicht reichen, finden Sie in der Datei MORICONS.DLL nochmals mehr als hundert zusätzliche Symbole.
Cursor
Der Cursor bzw. Mauszeiger zeigt die Bewegung der Maus auf dem Bildschirm an. Meist wird der Cursor als Pfeil dargestellt. Je nach Verwendungszweck kann er jedoch eine Vielzahl von Formen annehmen. Dabei können Sie auf vordefinierte Darstellungen zurückgreifen oder Cursor selbst erstellen. Die vordefinierten Formen, die Windows benutzt und Ihnen für Ihre Programme auch zur Verfügung stehen, können Sie im Anhang unter der Funktion LoadCursor finden. Gespeichert sind diese Standardcursorformen in den entsprechenden Bildschirmtreibern wie zum Beispiel VGA.DRV oder SUPERVGA.DRV.
Cursor können im Gegensatz zu den Symbolen nur schwarzweiß erscheinen. Allerdings kann man dafür sorgen, daß sie wahlweise durchscheinend, ausgefüllt oder invertiert wirken. Ein Mauszeiger ist genauso groß wie ein Icon, hat also meist 32 mal 32 Bildpunkte. Er wird standardmäßig in einer Datei mit der Endung CUR gespeichert. Neben dem äußeren Erscheinungsbild hat jeder Cursor noch einen sogenannten Hotspot (üblich sind auch die Begriffe Kontaktpunkt oder Zentrierpunkt). Dieser Punkt ist ein einzelnes Pixel (Bildschirmpunkt), das die Stelle festlegt, an der der Cursor Kontakt haben muß, um eine Aktion auszulösen. So ist der Kontaktpunkt bei einem Pfeilcursor sinnvollerweise die Spitze und bei einem kreuzförmigen Cursor der Achsenschnittpunkt.
Caret
Bei DOS-Programmen bedeutet der Begriff Cursor das blinkende Zeichen, das die aktuelle Eingabestelle markiert. In der Windows-Terminologie bezeichnet Cursor jedoch den Mauszeiger. Als Name für die Eingabemarke wird daher der Begriff Caret verwendet (siehe Bild 1.11).

Bild 1.11: Das Caret
Trotz dieser eigentlich recht eindeutigen Sprachregelung wird der Begriff Cursor auch in Windows selbst nicht einheitlich verwendet. So wird in der Systemsteuerung vom Einstellen der "Cursor-Blinkfrequenz" gesprochen, obwohl es sich genaugenommen um eine "Caret-Blinkfrequenz" handelt. Achten Sie also darauf, in welchem Zusammenhang der Begriff gebraucht wird, um festzustellen, was eigentlich gemeint ist.

1.7 Programmieren für Windows

Der folgende Abschnitt erläutert einige Begriffe und Konzepte, die bei der Windows-Programmierung benutzt werden.

1.7.1 Funktionen

Wenn Sie Windows-Programme in C erstellen wollen, benötigen Sie neben den Standard-C-Funktionen eine große Anzahl von zusätzlichen Funktionen. Damit kann man zum Beispiel Fenster anlegen, Text und Grafiken ausgeben, Dateien öffnen und so weiter. Das Windows-API (Application Programming Interface) stellt mehrere hundert Funktionen in besonderen Bibliotheken für die verschiedensten Aufgaben zur Verfügung.
Ein großer Teil der Anfangsschwierigkeiten bei der Windows-Programmierung besteht nun darin, sich einen Überblick über die vorhandenen Funktionen zu schaffen. Außerdem muß man sich als C-Programmierer abgewöhnen, einige der normalen C-Funktionen wie z.B. printf zu verwenden, da deren Benutzung unter Windows nicht mehr sinnvoll ist. Wenn Sie in die Handbücher zu ihren Compilern sehen, finden Sie zu jeder Standard-C-Funktion vermerkt, ob sie für Windows geeignet ist oder nicht. Insbesondere Funktionen zur Textausgabe und zur Speicherverwaltung sind für Windows nicht mehr einsetzbar. Einige Beispiele für Windows-Funktionen finden Sie im Anhang.

1.7.2 Namen

Wenn Sie Ihr erstes Windows-Programm sehen, werden Sie wahrscheinlich Probleme haben, es zu lesen. Selbst wenn man schon länger in C programmiert, hat man Schwierigkeiten, die Programme vom Aufbau her zu verstehen. Das liegt unter anderem daran, daß die Namen für Funktionen, Datentypen, Konstanten und Variablen in einer für Windows typischen Schreibweise verwendet werden.
Funktionen werden so bezeichnet, daß jedes Wort im Funktionsnamen mit Großbuchstaben anfängt wie zum Beispiel CreateWindow, ScrollWindow oder GetNearestColor. Diese Schreibweise unterscheidet sich von normalem C, wo Funktionsnamen kleingeschrieben werden, wie zum Beispiel fprintf, strcpy oder bsearch.
Konstanten werden in großer Zahl in Windows-Programmen verwendet. Viele sind standardmäßig in der Include-Datei windows.h enthalten. Wie auch im Standard-C üblich, werden Konstanten durchgehend groß geschrieben, um sie von Variablen zu unterscheiden (WS_MINIMIZE, NULL, TRUE).
Datentypen wie zum Beispiel BYTE, BOOL, DWORD oderWNDCLASS wurden mit der Anweisung typedef festgelegt.

typedef unsigned char       BYTE;
typedef int                 BOOL;
typedef unsigned long       DWORD;
typedef struct tagWNDCLASS
{
    UINT        style;
    WNDPROC     lpfnWndProc;
    int         cbClsExtra;
    int         cbWndExtra;
    HINSTANCE   hInstance;
    HICON       hIcon;
    HCURSOR     hCursor;
    HBRUSH      hbrBackground;
    LPCSTR      lpszMenuName;
    LPCSTR      lpszClassName;
} WNDCLASS;

Derartige Datentypen werden ebenso wie die Konstanten groß geschrieben. Ein wesentlicher Vorteil ihrer Benutzung ist, daß man aussagekräftige Namen für sie vergeben kann, die schon Aufschluß über ihren Verwendungszweck liefern.
Bei den Variablennamen wird von vielen Programmierern eine besondere Schreibweise, die sogenannte ungarische Notation, verwendet. Hierbei fängt jeder Variablenname mit einer Vorsilbe (Präfix) an, die etwas über den Variablentyp aussagt, gefolgt vom eigentlichen Namen, der mit einem Großbuchstaben beginnt. Ein Beispiel ist der Name szPauseName. Der Präfix sz steht hier für "string-zero terminated" = "Zeichenkette, mit binärer Null begrenzt". Ein weiteres Beispiel wäre die Vorsilbe fn, die für Funktion steht. Für die Vergabe der Präfixe existiert keine einheitliche Norm. Bei größeren Projekten sollte man daher alle Beteiligten auf eine einheitliche Namensgebung verpflichten. Erst dann ist die ungarische Notation sinnvoll und nützlich.

1.7.3 Handle

Ein Handle bzw. Bezug ist eine vorzeichenlose 16-Bit-Zahl, mit der ein Objekt in Windows gekennzeichnet ist. Ein solches Objekt kann ein Fenster, ein Zeichenbereich oder ähnliches sein. Jeder Zugriff auf ein Objekt erfolgt über eine solche Kennziffer. Diese Vorgehensweise unterscheidet sich von DOS-Programmen, bei denen häufig die direkte Speicheradresse benutzt wird, wie zum Beispiel beim direkten Schreiben in den Bildschirmspeicher. Die unter Windows übliche Methode, mit Kennziffern zu arbeiten, mag am Anfang gewöhnungsbedürftig sein, sie hat jedoch große Vorteile, was Sicherheit und Hardwareunabhängigkeit der Programme angeht. Die Kennzifferarten werden in Windows mit sprechenden Namen versehen (durch die Preprozessoranweisung typedef). Dazu gehören die Typen HWND für Fenster, HICON für Symbole oder HCURSOR für Mauszeiger. In allen Fällen handelt es sich um vorzeichenlose Integerzahlen. Die unterschiedliche Bezeichnung dient in erster Linie der besseren Lesbarkeit der Programme.

1.7.4 Instanz

Eine Eigenschaft von Windows ist es, daß sich zu jedem Zeitpunkt mehrere Programme im Speicher befinden können, die reihum den Prozessor nutzen und so quasi parallel laufen. Dabei kann es vorkommen, daß man ein und dasselbe Programm mehrmals startet. Da Windows mit dem zur Verfügung stehenden Speicher möglichst wirtschaftlich umgehen will, kontrolliert es, ob sich das zu ladende Programm nicht schon im Speicher befindet. Ist das der Fall, wird der Programmcode nicht nochmals geladen, sondern nur ein Bereich für die privaten Daten der weiteren Instanz des Programms angelegt. In Bild 1.12 sehen Sie drei Instanzen des Programms Rechner.

Bild 1.12: Mehrere Instanzen des Rechners
Für alle drei Programme ist insgesamt nur einmal der Programmcode geladen worden. Was diese drei Instanzen unterscheidet, sind der jeweils eigene Datenbereich und die jeweils eigene Kennziffer (engl.: Handle).

1.8 Zusammenfassung

- Der gesamte Informationsfluß innerhalb von Windows läuft über Nachrichten. Dabei erzeugt jeder Tastendruck, jede Mausbewegung, jeder Mausklick eine Nachricht.

- Im Gegensatz zu normalen C-Programmen braucht ein Windows-Programm neben der Hauptfunktion noch eine zweite Funktion, nämlich die Fensterfunktion. Diese Funktion verarbeitet die Nachrichten, die von Windows an das Fenster geschickt werden.

- Das aktive Fenster hat den Eingabefokus und erhält von Windows die Nachrichten.

- Bei der Darstellung von Fenstern sorgt Windows dafür, daß der Rahmen des Fensters - dazu zählen auch Bildlauf- und Menüleisten - auf dem Bildschirm dargestellt wird. Für den Inhalt des Fensters (engl.: client area) ist das Programm selber zuständig.

- Um es nochmals zu betonen: Windows sichert den alten Bildschirminhalt nicht, wenn z.B. ein Fenster vor ein anderes geschoben wird. Wird das oben liegende Fenster wieder zur Seite geschoben, muß das vorher verdeckte seinen Fensterinhalt selbst wiederherstellen. Das einzige, was Windows in diesem Fall macht, ist, dem betroffenen Fenster eine Nachricht zu schicken, welche Teile seines Fensterinhaltes zerstört wurden.

- Bei Dialogfeldern unterscheidet man zwischen modalen und nicht modalen Dialogen. Auf modale Dialoge muß der Anwender reagieren, nichtmodale Dialoge kann er zwischendurch verlassen.

- In der Windows-Terminologie wird der Mauszeiger als Cursor bezeichnet. Die Einfügemarke in einem Text heißt Caret.

- Unter Instanz versteht man ein geladenes Programm. Die meisten Programme können beliebig oft geladen werden. Sie bilden somit weitere Instanzen dieses Programms.

- Sind mehrere Instanzen eines Programms im Speicher, ist der Programmcode nur einmal vorhanden und wird von allen Instanzen gemeinsam genutzt. Nur die Bereiche für die Daten werden für jede Instanz neu angelegt.

- Jedes Objekt, wie zum Beispiel Fenster, Cursor oder Icon, enthält von Windows eine Kennziffer, unter der man es ansprechen kann. Der Fachbegriff für diese Kennziffer ist Handle oder Bezug.

Previous PageTop Of PageIndexList Of FiguresList Of TablesNext Page

This Web page was created using a Trial Version of HTML Transit 3.0.