API-Funktion CreateWindowEx(...)

Die Funktion CreateWindowEx(...) legt über eine Unzahl von Parametern die individuellen Eigenschaften eines Fensters fest und erstellt es.

CreateWindowEx(....) hat folgendes Prototyping:

HWND CreateWindowEx (DWORD dwExStyle, LPCTSTR lpClassName,
                     LPCTSTR lpWindowName, DWORD dwStyle,
                     int x, int y, int nWidth, int nHeight,
                     HWND hWndParent, HMENU hMenu,
                     HINSTANCE hInstance, LPVOID lpParam);

Die Parameter haben folgende Bedeutung:

Parameter

Bedeutung

DWORD dwExStyle Erweiterte Fensterstile des Fensters. Für dwExStyle sind eine ganze Reihen von Konstanten definiert von denen die wichtigsten weiter unten aufgeführt sind. Soll kein erweiterter Fensterstil definiert werden, so ist hier der Wert 0 einzusetzen.
LPCTSTR lpClassName Name der Fensterklasse, zu der das Fenster gehört. Über diesen Parameter werden die grundlegenden Eigenschaften des Fenster eingestellt. Alternativ kann hier auch eine vom System vordefinierte Fensterklasse (wie z.B. BUTTON oder EDIT) angegeben werden (mehr dazu später).
LPCTSTR lpWindowName Name des Fensters, ist gleichzeitig auch Fenstertitel wenn das Fenster eine Titelzeile besitzt. Bei vordefinierten Fenstern wie z.B. BUTTON gibt lpWindowName die Beschriftung an.
DWORD dwStyle 'Normale' Fensterstile. Auch hierfür sind wieder eine ganze Reihe von Konstanten definiert. Die wichtigsten sind ebenfalls weiter unten aufgeführt.
int x, int y Die Koordinaten (in Pixel) der linken oberen Ecke des Fensters. Für übergeordnete Fenster (was das sind, wird später noch erklärt) und Popup-Fenster beziehen sich die Koordinaten auf den Bildschirm und für untergeordnete Fenster auf die Client-Area des übergeordneten Fensters. Für den Parameter x kann der Wert CW_USEDEFAULT angegeben werden. In diesem Fall übernimmt WINDOWS die Positionierung des Fensters; der y Parameter wird dann ignoriert.
int nWidth, int nHeight Größe des Fenster in Pixel. Für überlappende Fenster (das sind 'normale' Fenster) kann auch hier für nWidth der Wert CW_USEDEFAULT eingesetzt werden um WINDOWS die Bestimmung der Fenstergröße zu überlassen, nHeight wird dann wieder ignoriert.
HWND hWndParent Fenster-Handle des übergeordneten Fenster. Besitzt das zu erzeugende Fenster kein übergeordnetes Fenster, wird hier der Wert '0' angegeben. Bei untergeordneten Fenstern wird hWndParent mit dem Fenster-Handle des übergeordneten Fensters belegt. Dadurch wird z.B. erreicht, dass das untergeordnete Fenster automatisch geschlossen wird wenn das übergeordnete Fenster geschlossen wird. WINDOWS2000 lässt für diesen Parameter zusätzlich den Wert HWND_MESSAGE zu um ein so genanntes message-only Fenster zu erstellen. Ein message-only Fenster ist nicht sichtbar und dient, wie der Name schon sagt, nur zur Verarbeitung von Nachrichten innerhalb einer Anwendung.
HMENU hMenu Für übergeordnete Fenster gibt er das Handle des zum Fenster gehörenden Menüs an. Soll dem Fenster beim Erstellen kein Menü zugewiesen werden, so wird hier der Wert '0' angegeben. Bei untergeordneten Fenstern hat dieser Parameter eine etwas andere Bedeutung. Damit untergeordnete Fenster vom übergeordneten Fenster identifiziert werden können erhalten Sie eine fortlaufende Nummer die über hMenu festgelegt wird.
HINSTANCE hInstance Handle der Instanz, zu der das Fenster gehört. Entspricht in der Regel dem hInstance Parameter von WinMain(...). Dieser Parameter ist nur unter WINDOWS95/98 relevant, WINDOWS NT/2000 irgnorieren diesen Parameter.
LPVOID lpParam void-Zeiger auf ein beliebiges Datum. Dieser Zeiger wird an die Fensterprozedur (siehe später) innerhalb der Struktur CREATESTRUCT bei der Übermittlung der WM_CREATE Nachricht übergeben. Über diesen Parameter kann die Anwendung somit dem Fenster zusätzliche Daten übergeben, die für die Erstellung eines Fensters intern benötigt werden. Sollen keine Daten übergeben werden, so ist lpParam auf 'NULL' zu setzen.

Als Returnwert liefert die Funktion das Fenster-Handle des neu erstellten Fensters zurück. Im Fehlerfall wird der Wert 0 zurückgeliefert. Als Reaktion auf diese Funktion erhält das zu erstellende Fenster folgende Nachrichten (in der angegebenen Reihenfolge): WM_NCCREATE, WM_NCCALCSIZE, WM_CREATE.

hinweis.gif (2251 Byte) Beachten Sie bitte, dass das Fenster nur erstellt aber noch nicht angezeigt wird. Hierfür ist anschließend die Funktion ShowWindow(...) aufzurufen.

Ein einmal erstelltes Fenster bleibt solange gültig, bis entweder die Anwendung beendet wird oder die Funktion DestroyWindow(...) aufgerufen wird.

Für den Parameter dwExStyle sind eine Unmenge von Konstanten definiert die alle mit dem Präfix WS_EX_ beginnen. Nachfolgend nur ein paar dieser Konstanten. Ein vollständige Aufzählung würde hier den Umfang der Funktionsbeschreibung sprengen. Sehen Sie dazu bitte in der Online-Hilfe unter dem Stichwort CreateWindowEx(...) nach.

erweiterter Fensterstil

Fensterdarstellung

0
(kein erweiterter Fensterstil)
WS_EX_CLIENTEDGE
(hervorgehobener Rahmen)
WS_EX_TRANSPARENT
(durchsichtiges Fenster)
WS_EX_CONTEXTHELP
(Hilfe-Symbol, nur für Fenster
mit Child-Windows)
WS_EX_ACCEPTFILES

Ermöglicht mittels Drag&Drop Dateien ins
Fenster zu ziehen.

WS_EX_LAYERED

Nur WINDOWS2000: Erstellt ein so genanntes
layered Fenster. Layered Fenster werden für
komplexe Darstellung, Animationen und alpha-blending
eingesetzt.

WS_EX_NOACTIVATE

Nur WINDOWS2000: Ein Fenster mit diesem Stil kann
nicht durch den Anwender in der Vordergrund gebracht
oder aktiviert werden. Dies kann nur die Anwendung
selbst erfolgen.

WS_EX_TOOLWINDOW

Fenster mit schmaler Titelleiste und ohne Icon.

Auch für den Parameter dwStyle sind eine ganze Reihe von Konstanten definiert die Sie in der Online-Hilfe zu dieser Funktion finden. Der Fensterstil ist immer eine (sinnvolle und zulässige) Kombination aus den verfügbaren Konstanten. Die nachfolgende Tabelle enthält eine kleine Übersicht über die zur Verfügung stehenden Stile:

Stil

Bedeutung

WS_OVERLAPPED Erzeugt ein überlappendes Fenster. Ein überlappendes Fenster besitzt immer eine Titelzeile und einen Fensterrahmen. Dieser Stil eignet sich für Hauptfenster einer Anwendung.
WS_POPUP Erzeugt ein Popup Fenster und kann nicht mit dem Stil WS_CHILD kombiniert werden. Eignet sich für die Darstellung eines untergeordneten Fensters das frei auf dem Desktop positioniert werden kann.
WS_CHILD Erzeugt ein untergeordnetes Child-Window. Kann nicht mit WS_POPUP kombiniert werden. Eignet sich für die Darstellung eines untergeordneten Fensters das nur innerhalb der Client-Area des übergeordneten Fensters positioniert werden kann.
WS_BORDER Erzeugt eine Fenster mit einem einfachen Rahmen. Die Fenstergröße kann nicht durch Ziehen am Rahmen verändert werden.
WS_DLGFRAME Erzeugt ein Fenster mit einem dicken Rahmen. Die Fenstergröße kann nicht durch Ziehen am Rahmen verändert werden. Wird hauptsächlich bei Dialogen verwendet.
WS_THICKFRAME Erzeugt ein Fenster mit einem dicken Rahmen. Die Fenstergröße kann durch Ziehen am Rahmen verändert werden. Zusätzlich muss der Stil WS_CAPTION gesetzt sein.
WS_CAPTION Erzeugt ein Fenster mit einer Titelzeile. Dieser Stil beinhaltet automatisch den Stil WS_BORDER. WS_CAPTION kann nicht mit WS_DLGFRAME kombiniert werden.
WS_HSCROLL, WS_VSCROLL Erzeugt ein Fenster mit einer horizontalen bzw. vertikalen Bildlaufleiste (Scrollbar).
WS_MINIMIZEBOX,
WS_MAXIMIZEBOX
Erzeugt ein Fenster mit dem Symbol zum Verkleinern bzw. Vergrößern des Fensters. Der Stil WS_CAPTION muss ebenfalls gesetzt sein.
WS_MAXIMIZE,
WS_MINIMIZE
Das Fenster wird zu Beginn als maximiertes bzw. minimiertes Fenster dargestellt.
WS_SYSMENU Erzeugt ein Fenster mit einem System-Menü. Das System-Menü wird eingeblendet wenn das kleine Symbol links in der Titelzeile angeklickt wird.
WS_VISIBLE Das Fenster ist zu Beginn sichtbar.
WS_OVERLAPPEDWINDOW Erzeugt ein Fenster mit folgenden Stilen: WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX und WS_MAXIMIZEBOX
WS_POPUPWINDOW Erzeugt ein Fenster mit folgenden Stilen: WS_POPUP, WS_BORDER und WS_SYSMENU. Der Stil WS_CAPTION muss zusätzlich mit angegeben werden wenn das System-Menü sichtbar sein soll!

Nachfolgend einige Fensterstile sowie die dadurch erzeugten Fensterelemente:

achtung.gif (2004 Byte) Vergessen Sie nicht den Stil WS_VISIBLE zu setzen, sonst werden Sie das Fenster nie zu Gesicht bekommen! achtung.gif (2004 Byte)

 



Copyright © 2004

Senden Sie Emails mit Fragen oder Kommentaren zu dieser Website an: mailto:info@cpp-tutor.de
 Wolfgang Schröder, Lerchenweg 23, D-72805 Lichtenstein. Tel: +49 7129 6470