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.
 |
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:

 |
Vergessen Sie nicht den Stil WS_VISIBLE zu setzen, sonst werden Sie das Fenster nie zu
Gesicht bekommen! |
 |
|