SetWindowLongPtrA-Funktion (winuser.h)

Ändert ein Attribut des angegebenen Fensters. Die Funktion legt auch einen Wert im angegebenen Offset im zusätzlichen Fensterspeicher fest.

Hinweis Um Code zu schreiben, der sowohl mit 32-Bit- als auch 64-Bit-Versionen von Windows kompatibel ist, verwenden Sie SetWindowLongPtr. Beim Kompilieren von 32-Bit-Windows wird SetWindowLongPtr als Aufruf der SetWindowLong-Funktion definiert.

 

Syntax

LONG_PTR SetWindowLongPtrA(
  [in] HWND     hWnd,
  [in] int      nIndex,
  [in] LONG_PTR dwNewLong
);

Parameter

[in] hWnd

Typ: HWND

Ein Handle zum Fenster und indirekt die Klasse, zu der das Fenster gehört. Die Funktion "SetWindowLongPtr " schlägt fehl, wenn der prozess, der vom hWnd-Parameter angegeben ist, in einer höheren Prozessberechtigung in der UIPI-Hierarchie liegt als der Prozess, in dem sich der aufrufende Thread befindet.

Windows XP/2000: Die Funktion "SetWindowLongPtr " schlägt fehl, wenn das durch den hWnd-Parameter angegebene Fenster nicht zu demselben Prozess gehört wie der aufrufende Thread.

[in] nIndex

Typ: int

Der nullbasierte Offset zum zu festlegenden Wert. Gültige Werte befinden sich im Bereich Null durch die Anzahl der Bytes des zusätzlichen Fensterspeichers, minus der Größe eines LONG_PTR. Um einen anderen Wert festzulegen, geben Sie einen der folgenden Werte an.

Wert Bedeutung
GWL_EXSTYLE
-20
Legt einen neuen erweiterten Fensterstil fest.
GWLP_HINSTANCE
–6
Legt einen neuen Anwendungsinstanzhandpunkt fest.
GWLP_ID
-12
Legt einen neuen Bezeichner des untergeordneten Fensters fest. Das Fenster kann kein Fenster auf oberster Ebene sein.
GWL_STYLE
-16
Legt einen neuen Fensterstil fest.
GWLP_USERDATA
-21
Legt die Benutzerdaten fest, die dem Fenster zugeordnet sind. Diese Daten sind für die Verwendung durch die Anwendung vorgesehen, die das Fenster erstellt hat. Der Wert ist zunächst null.
GWLP_WNDPROC
–4
Legt eine neue Adresse für die Fensterprozedur fest.
 

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

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

[in] dwNewLong

Typ: LONG_PTR

Der Ersetzungswert.

Rückgabewert

Typ: LONG_PTR

Wenn die Funktion erfolgreich ist, ist der Rückgabewert der vorherige Wert des angegebenen Offsets.

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

Wenn der vorherige Wert null ist und die Funktion erfolgreich ist, ist der Rückgabewert null, aber die Funktion löscht die letzten Fehlerinformationen nicht. Um Erfolg oder Fehler zu ermitteln, löschen Sie die letzten Fehlerinformationen, indem Sie SetLastError mit 0 aufrufen, und rufen Sie dann SetWindowLongPtr auf. Funktionsfehler werden durch einen Rückgabewert von Null und ein GetLastError-Ergebnis angegeben, das nichtzero ist.

Hinweise

Bestimmte Fensterdaten werden zwischengespeichert, sodass Änderungen, die Sie mit SetWindowLongPtr vornehmen, erst wirksam werden, wenn Sie die Funktion "SetWindowPos " aufrufen.

Wenn Sie SetWindowLongPtr mit dem GWLP_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 SetWindowLongPtr mit dem DWLP_MSGRESULT Index verwenden, um den Rückgabewert für eine Nachricht festzulegen, die von einer Dialogfeldprozedur verarbeitet wird, sollte die Dialogfeldprozedur direkt danach TRUE zurückgeben. Andernfalls kann die geschachtelte Fensternachricht, wenn Sie eine Funktion aufrufen, die zu einer Fensterprozedur führt, den zurückgegebenen Wert überschrieben werden kann, den Sie mithilfe von DWLP_MSGRESULT festlegen.

Beim Aufrufen von SetWindowLongPtr mit dem GWLP_WNDPROC Index wird eine Unterklasse der Fensterklasse erstellt, die zum Erstellen des Fensters verwendet wird. Eine Anwendung kann eine Systemklasse unterklassen, sollte jedoch keine Fensterklasse unterklassen, die von einem anderen Prozess erstellt wurde. Mit der Funktion "SetWindowLongPtr " wird die Fensterunterklasse erstellt, indem die Fensterprozedur geändert wird, die einer bestimmten Fensterklasse zugeordnet ist, wodurch das System die neue Fensterprozedur anstelle der vorherigen aufruft. Eine Anwendung muss keine Nachrichten übergeben, die nicht von der neuen Fensterprozedur an die vorherige Fensterprozedur verarbeitet werden, indem CallWindowProc aufgerufen wird. Dadurch kann die Anwendung eine Kette von Fensterprozeduren erstellen.

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

Rufen Sie "SetWindowLongPtr " nicht mit dem GWLP_HWNDPARENT Index auf, um das übergeordnete Fenster eines untergeordneten Fensters zu ändern. Verwenden Sie stattdessen die Funktion "SetParent" .

Wenn das Fenster über eine Klassenart von CS_CLASSDCoderCS_PARENTDC verfügt, legen Sie die erweiterten Fensterformatvorlagen WS_EX_COMPOSITED oder WS_EX_LAYERED nicht fest.

Wenn Sie SetWindowLongPtr aufrufen, um die Formatvorlage auf einer Statusleiste festzulegen, wird die Position zurückgesetzt.

Hinweis

Der winuser.h-Header definiert SetWindowLongPtr als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstanten automatisch auswählt. Das Mischen der Verwendung des Codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann dazu führen, dass keine Übereinstimmungen auftreten, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

   
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 (enthalten Windows.h)
Bibliothek User32.lib
DLL User32.dll
APIs ext-ms-win-ntuser-windowclass-l1-1-0 (eingeführt in Windows 8)

Weitere Informationen

CallWindowProc

Konzept

GetWindowLongPtr

Referenz

RegisterClassEx

SetParent

WNDCLASSEX

Fensterklassen

WindowProc