SetWindowLongA-Funktion (winuser.h)

Ändert ein Attribut des angegebenen Fensters. Die Funktion legt auch den 32-Bit-Wert (long) am angegebenen Offset in den zusätzlichen Fensterspeicher fest.

Hinweis Diese Funktion wurde von der SetWindowLongPtr-Funktion abgelöst. Verwenden Sie die SetWindowLongPtr-Funktion , um Code zu schreiben, der sowohl mit 32-Bit- als auch mit 64-Bit-Versionen von Windows kompatibel ist.
 

Syntax

LONG SetWindowLongA(
  [in] HWND hWnd,
  [in] int  nIndex,
  [in] LONG dwNewLong
);

Parameter

[in] hWnd

Typ: HWND

Ein Handle für das Fenster und indirekt die Klasse, zu der das Fenster gehört.

[in] nIndex

Typ: int

Der nullbasierte Offset auf den festzulegenden Wert. Gültige Werte liegen im Bereich 0 bis zur Anzahl der Bytes des zusätzlichen Fensterspeichers abzüglich der Größe einer ganzen Zahl. Um einen anderen Wert festzulegen, geben Sie einen der folgenden Werte an.

Wert Bedeutung
GWL_EXSTYLE
-20
Legt einen neuen erweiterten Fensterstil fest.
GWL_HINSTANCE
–6
Legt eine neue Anwendung instance Handle fest.
GWL_ID
-12
Legt einen neuen Bezeichner des untergeordneten Fensters fest. Das Fenster darf kein Fenster der obersten Ebene sein.
GWL_STYLE
-16
Legt ein neues Fensterformat fest.
GWL_USERDATA
-21
Legt die dem Fenster zugeordneten Benutzerdaten fest. Diese Daten sind für die Verwendung durch die Anwendung vorgesehen, die das Fenster erstellt hat. Sein Wert ist anfänglich 0 (null).
GWL_WNDPROC
–4
Legt eine neue Adresse für die Fensterprozedur fest.

Sie können dieses Attribut nicht ändern, wenn das Fenster nicht zum gleichen Prozess wie der aufrufende Thread gehört.

 

Die folgenden Werte sind auch verfügbar, wenn der hWnd-Parameter ein Dialogfeld identifiziert.

Wert Bedeutung
DWL_DLGPROC
DWLP_MSGRESULT + sizeof(LRESULT)
Legt die neue Adresse der Dialogfeldprozedur fest.
DWL_MSGRESULT
0
Legt den Rückgabewert einer Nachricht fest, die in der Dialogfeldprozedur verarbeitet wird.
DWL_USER
DWLP_DLGPROC + sizeof(DLGPROC)
Legt neue zusätzliche Informationen fest, die für die Anwendung privat sind, z. B. Handles oder Zeiger.

[in] dwNewLong

Typ: LONG

Der Ersetzungswert.

Rückgabewert

Typ: LONG

Wenn die Funktion erfolgreich ist, ist der Rückgabewert der vorherige Wert der angegebenen 32-Bit-Ganzzahl.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Wenn der vorherige Wert der angegebenen 32-Bit-Ganzzahl null ist und die Funktion erfolgreich ist, ist der Rückgabewert 0, aber die Funktion löscht die letzten Fehlerinformationen nicht. Dies erschwert die Ermittlung von Erfolg oder Misserfolg. Um dies zu beheben, sollten Sie die letzten Fehlerinformationen löschen, indem Sie SetLastError mit 0 aufrufen, bevor Sie SetWindowLong aufrufen. Dann wird ein Funktionsfehler durch einen Rückgabewert von 0 und ein GetLastError-Ergebnis angezeigt, das ungleich null ist.

Hinweise

Bestimmte Fensterdaten werden zwischengespeichert, sodass Änderungen, die Sie mit SetWindowLong vornehmen, erst wirksam werden, wenn Sie die SetWindowPos-Funktion aufrufen. Wenn Sie eine der Framestile ändern, müssen Sie SetWindowPos mit dem flag SWP_FRAMECHANGED aufrufen, damit der Cache ordnungsgemäß aktualisiert wird.

Wenn Sie SetWindowLong mit dem GWL_WNDPROC Index verwenden, um die Fensterprozedur zu ersetzen, muss die Fensterprozedur den Richtlinien entsprechen, die in der Beschreibung der WindowProc-Rückruffunktion angegeben sind.

Wenn Sie SetWindowLong mit dem DWL_MSGRESULT Index verwenden, um den Rückgabewert für eine nachricht festzulegen, die von einer Dialogprozedur verarbeitet wird, sollten Sie direkt danach TRUE zurückgeben. Wenn Sie andernfalls eine Funktion aufrufen, die dazu führt, dass Ihre Dialogprozedur eine Fenstermeldung empfängt, kann die geschachtelte Fensternachricht den Rückgabewert überschreiben, den Sie mithilfe von DWL_MSGRESULT festgelegt haben.

Durch Aufrufen von SetWindowLong mit dem GWL_WNDPROC Index wird eine Unterklasse der Fensterklasse erstellt, die zum Erstellen des Fensters verwendet wird. Eine Anwendung kann eine Systemklasse unterklassen, sollte aber keine Unterklasse einer Fensterklasse sein, die von einem anderen Prozess erstellt wurde. Die SetWindowLong-Funktion erstellt die Fensterunterklasse, indem sie die Fensterprozedur ändert, die einer bestimmten Fensterklasse zugeordnet ist, wodurch das System die neue Fensterprozedur anstelle der vorherigen aufruft. Eine Anwendung muss alle Nachrichten, die nicht von der neuen Fensterprozedur verarbeitet wurden, durch Aufrufen von CallWindowProc an die vorherige Fensterprozedur übergeben. Dadurch kann die Anwendung eine Kette von Fensterprozeduren erstellen.

Reservieren Sie zusätzlichen Fensterspeicher, indem Sie einen Wert ungleich null im cbWndExtra-Element der WNDCLASSEX-Struktur angeben, die mit der RegisterClassEx-Funktion verwendet wird.

Sie dürfen SetWindowLong nicht mit dem GWL_HWNDPARENT Index aufrufen, um das übergeordnete Element eines untergeordneten Fensters zu ändern. Verwenden Sie stattdessen die SetParent-Funktion .

Wenn das Fenster den Klassenstil CS_CLASSDC oder CS_OWNDC aufweist, sollten Sie die erweiterten Fensterstile nicht WS_EX_COMPOSITED oder WS_EX_LAYERED festlegen.

Wenn Sie SetWindowLong aufrufen, um die Formatvorlage auf einer Fortschrittsleiste festzulegen, wird ihre Position zurückgesetzt.

Beispiele

Ein Beispiel finden Sie unter Unterklassen eines Fensters.

Hinweis

Der winuser.h-Header definiert SetWindowLong als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht Codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winuser.h (windows.h einschließen)
Bibliothek User32.lib
DLL User32.dll
APIs ext-ms-win-ntuser-windowclass-l1-1-0 (eingeführt in Windows 8)

Weitere Informationen

CallWindowProc

Konzept

GetWindowLong

Referenz

RegisterClassEx

SetParent

SetWindowLongPtr

WNDCLASSEX

Fensterklassen

WindowProc