SetWindowLongPtrA-Funktion (winuser.h)
Ändert ein Attribut des angegebenen Fensters. Die Funktion legt auch einen Wert am angegebenen Offset im zusätzlichen Fensterspeicher fest.
Syntax
LONG_PTR SetWindowLongPtrA(
[in] HWND hWnd,
[in] int nIndex,
[in] LONG_PTR dwNewLong
);
Parameter
[in] hWnd
Typ: HWND
Ein Handle für das Fenster und indirekt die Klasse, zu der das Fenster gehört. Die SetWindowLongPtr-Funktion schlägt fehl, wenn der Prozess, der das durch den hWnd-Parameter angegebene Fenster besitzt, eine höhere Prozessberechtigung in der UIPI-Hierarchie aufweist als der Prozess, in dem sich der aufrufende Thread befindet.
Windows XP/2000: Die SetWindowLongPtr-Funktion schlägt fehl, wenn das durch den hWnd-Parameter angegebene Fenster nicht zum gleichen Prozess wie der aufrufende Thread gehört.
[in] nIndex
Typ: int
Der nullbasierte Offset auf den festzulegenden Wert. Gültige Werte liegen im Bereich Null durch die Anzahl der Bytes des zusätzlichen Fensterspeichers abzüglich der Größe eines LONG_PTR. Um einen anderen Wert festzulegen, geben Sie einen der folgenden Werte an.
Wert | Bedeutung |
---|---|
|
Legt ein neues erweitertes Fensterformat fest. |
|
Legt eine neue Anwendung instance Handle fest. |
|
Legt einen neuen Bezeichner des untergeordneten Fensters fest. Das Fenster kann kein Fenster auf oberster Ebene sein. |
|
Legt ein neues Fensterformat fest. |
|
Legt die dem Fenster zugeordneten Benutzerdaten fest. Diese Daten sind für die Verwendung durch die Anwendung vorgesehen, die das Fenster erstellt hat. Der Wert ist anfangs 0. |
|
Legt eine neue Adresse für die Fensterprozedur fest. |
Die folgenden Werte sind auch verfügbar, wenn der hWnd-Parameter ein Dialogfeld identifiziert.
[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 0 ist und die Funktion erfolgreich ist, ist der Rückgabewert 0, aber die Funktion löscht die letzten Fehlerinformationen nicht. Um den 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 angezeigt, das nonzero ist.
Bemerkungen
Bestimmte Fensterdaten werden zwischengespeichert. Änderungen, die Sie mit SetWindowLongPtr vornehmen, werden erst wirksam, wenn Sie die SetWindowPos-Funktion 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. Wenn Sie andernfalls eine Funktion aufrufen, die dazu führt, dass ihre Dialogfeldprozedur eine Fenstermeldung empfängt, könnte die Meldung des geschachtelten Fensters den Rückgabewert überschreiben, den Sie mithilfe von DWLP_MSGRESULT festlegen.
Durch 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 aber keine Unterklasse einer Fensterklasse sein, die von einem anderen Prozess erstellt wurde. Die SetWindowLongPtr-Funktion erstellt die Fensterunterklasse, indem sie die Fensterprozedur ändert, die einer bestimmten Fensterklasse zugeordnet ist, sodass 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 nonzero-Wert im cbWndExtra-Member der WNDCLASSEX-Struktur angeben, die mit der RegisterClassEx-Funktion verwendet wird.
Rufen Sie SetWindowLongPtr nicht mit dem GWLP_HWNDPARENT Index auf, um das übergeordnete Element eines untergeordneten Fensters zu ändern. Verwenden Sie stattdessen die SetParent-Funktion .
Wenn das Fenster den Klassenstil CS_CLASSDC oder CS_PARENTDC aufweist, legen Sie die erweiterten Fensterstile nicht WS_EX_COMPOSITED oder WS_EX_LAYERED fest.
Wenn Sie SetWindowLongPtr aufrufen, um die Formatvorlage auf einer Fortschrittsleiste festzulegen, wird die Position zurückgesetzt.
Hinweis
Der winuser.h-Header definiert SetWindowLongPtr als Alias, der automatisch die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit nicht codierungsneutralem Code kann zu Nichtübereinstimmungen führen, 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 (einschließlich Windows.h) |
Bibliothek | User32.lib |
DLL | User32.dll |
APIs | ext-ms-win-ntuser-windowclass-l1-1-0 (in Windows 8 eingeführt) |
Weitere Informationen
Konzept
Referenz