Letzte Änderung: 2.11.97 von B. Tritsch
Zurück zum Index "PC- und MS-Windows-Support"
Unter Windows besteht eine besondere Vereinbarung bezüglich der Variablen- und Funktionsnamen: Die ungarische Namenskonvention. Der Grund ist die Forderung nach aussagekräftigen Bezeichnungen, die die Lesbarkeit des Programm-Codes verbessern und helfen unsinnige Zuweisungen zu vermeiden.
Bei Variablen beginnt der Name mit einem Präfix aus Kleinbuchstaben, die den Charakter definieren. Danach folgt der eigentliche Name, der sich aus einer kombinierten Groß/Kleinschreibung zusammensetzt.
Beispiel:
lpszFirstName (long pointer to null terminated string FirstName) lpszName = cbName (Byteanzahl an einen long pointer) = Sinnlose Operation
| Präfix | Datentyp |
| a b c cb ch cs dw f h hdc hwnd i l lp n pt sz w |
Array, Feld Boolean Class Count of Bytes, Byteanzahl Character, Zeichen String Class CString unsigned long = DWORD (32 Bit) Funktion Handle, 16-Bit-Identifikation (32 Bit bei WIN32) Handle on Display Context (dto) Handle on Window (dto) Index long integer (Redundant unter WIN32) long (far) pointer (Redundant unter WIN32) Integer x, y Point Null terminated String unsigned integer = WORD (16 Bit) |
Neben den Präfixen der Ungarischen Notation gibt es noch weitere Präfixe, die für das AFX-Rahmenwerk (AFX = Application Framework) und die Objektklassen benutzt werden.
| Präfix | Datentyp |
| C m_ Afx afx _Afx _afx AFX_ AFX_ID |
Klasse oder Struktur Elementvariable einer Klasse public-Funktion des Anw.-Rahmens public-Variable des Anw.-Rahmens interne Funktion des Anw.-Rahmens interne Variable des Anw.-Rahmens interne Struktur des Anw.-Rahmens interner Bezeichner des Anw.-Rahmens |
Bei Funktionen wird häufig ein Verb in Verbindung mit einem Hauptwort verwendet, um die betreffende Operation zu beschreiben, oder es werden (teilweise abgekürzte) Hauptworte zusammengesetzt. Die Groß/Kleinschreibung ist wie oben.
Beispiele:
CreateWindow, DrawText, DialogBox, DlgProc, MinWndProc
Während die Bibliotheken von C in Form vieler kleiner Header-Dateien ausgeliefert werden, besteht die Windows-Bibliothek aus einem File WINDOWS.H mit über 100 kByte Größe. In WINDOWS.H sind enthalten: Symbolische Konstanten, Datentypen und Prototypen.
Symbolische Konstanten
In WINDOWS.H sind rund 1500 symbolische Konstanten definiert, die Zahlenwerte in einer verständlichen Form repräsentieren.
Beispiele:
WM_CREATE WM_DESTROY (für Fenstermeldungen)
Datendefinitionen
In WINDOWS.H werden eine Reihe von Windows-spezifischen C-Datentypen definiert. Hierbei sind die folgenden die am meisten verwendeten:
| WINDOWS.H-Definition | C-Definition (Win 3.x/WinNT und Win95) |
| BOOL BYTE DWORD HANDLE HDC HWND LONG LPARAM LPSTR NPSTR UINT WPARAM WORD |
int (16/32 Bit) unsigned char (8/8 Bit) unsigned long (32/32 Bit) unsigned int (16/32 Bit) unsigned int (16/32 Bit) unsigned int (16/32 Bit) long (32/32 Bit) long (32/32 Bit) char far * (Redundant unter WIN32) char near * (Redundant unter WIN32) unsigned int (16/32 Bit) int (16/32 Bit) unsigned int (16/16 Bit) |
Eine Reihe von Makros erleichtern den Übergang von Windows 3.x zu einer 32-Bit Umgebung
| Makro | Definiert als | Anmerkung |
|---|---|---|
| VOID | ((void *) 0) | Unter Win 3.x war VOID als 0 definiert |
| FAR | NULL | Abwärtskompatibilität |
| NEAR | NULL | Abwärtskompatibilität |
| PASCAL | __stdcall | War _pascal unter Win 3.x |
| WINAPI | __stdcall | War _far _pascal unter Win 3.x |
| CALLBACK | __stdcall | War _far _pascal unter Win 3.x |
| FALSE | 0 | |
| TRUE | 1 |
Andere Makros wie LOBYTE, HIWORD und MAKELONG sind in ihrer Funktion im wesentlichen unverändert geblieben.
Neben einfachen Datentypen und Makros enthält WINDOWS.H auch eine Reihen von Strukturdefinitionen.
Funktionsprototypen
WINDOWS.H enthält viele Funktionsprototypen, die dem Compiler sagen, wie der Aufruf einer Routine auszusehen hat. Dies ermöglicht dem C-Compiler eine wirksame Fehlerprüfung.
Beispiel:
BOOL WINAPI TextOut (HDC, int, int, LPSTR, int);
Der Compiler weiß nun welche und wieviele Parameter die Routine hat und wie ihr Rückgabewert aussieht.
Jede Windows-Funktion verfügt über einen Prototyp in WINDOWS.H
Auch für eigene Funktionen sollte diese Technik übernommen werden: Deklaration der Funktionsprototypen in einer eigenen Header-Datei. Dies entspricht auch schon weitgehend C++-Konventionen.
Ein Handle ist ein Bezeichner und besteht aus einem unsigned integer mit der Länge von 16 Bits (32 Bits unter Windows/32 und Windows NT). Windows setzt Handles ausschließlich zum Identifizieren von Objekten ein, wobei jedes Handle einzigartig ist. Im Fehlerfall gibt eine entsprechende Funktion einen NULL-Handle zurück.
Die beiden wichtigsten Handle-Typen für Windows sind Fenster- und Display Context Handles. Es werden jedoch auch Menüs, Strings, Icons, Cursor, Stift, Pinsel, Schriftarten und sogar Speicherbereiche durch Handles identifiziert.
Windows basiert auf einem nicht-sequentiellen, meldungsgetriebenen Programmiermodell, um das herum sich die Programme strukturieren. Eine Meldung (Message) besteht dabei aus Informationen hinsichtlich einer Veränderung der Benutzerschnittstelle oder anderen internen Attributen.
Prinzipiell bestehen Messages aus vorzeichenlosen 16-Bit-Werten (32-Bit-Werten), die aber aus Verständlichkeitsgründen bestimmte Namen haben. Diese fangen immer mit dem Präfix WM_ an und können leicht mit dem Programm SPY aus dem MS-SDK betrachtet werden.
Hierbei gilt zu beachten, daß die Reihenfolge der Messages unvorhersehbar ist und sie von Programmen beachtet oder auch ignoriert werden können. Dies ist ein großer Unterschied zu prozedur-orientierten und sequentiellen Programmen.
Es gibt unter Windows acht verschiedene Meldungstypen:
| Typ | Beschreibung |
| - Hardware - Fensterpflege - Schnittstelle - Beendigung - Privat - Systemressourcen - Gem. Daten - Systemintern |
Maus- und Tastatureingabe Benachrichtigung, Abfrage Menü, Mauszeiger, Scrollbars, Dialoge Beenden von Anwendung oder System Dialogboxkontollen Farbänderung, Schriftarten, Spooler, Modi Clipboard, DDE, OLE Nicht dokumentierte Meldungen |