Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ä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
);
Die 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, in einer höheren Prozessberechtigung in der UIPI-Hierarchie liegt 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 0 bis zur Anzahl der Bytes des zusätzlichen Fensterspeichers, abzüglich der Größe eines LONG_PTR. Wenn Sie einen anderen Wert festlegen möchten, geben Sie einen der folgenden Werte an.
Wert | Bedeutung |
---|---|
|
Legt eine neue Formatvorlage für erweiterte Fenster fest. |
|
Legt ein neues Anwendungsinstanzhandle fest. |
|
Legt einen neuen Besitzer für ein Fenster der obersten Ebene fest. |
|
Legt einen neuen Bezeichner des untergeordneten Fensters fest. Das Fenster kann kein Fenster der obersten Ebene sein. |
|
Legt eine neue Fensterformatvorlage fest. |
|
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 anfangs null. |
|
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 fehlschlägt, ist der Rückgabewert null. Rufen Sie GetLastErrorauf, um erweiterte Fehlerinformationen zu erhalten.
Wenn der vorherige Wert null ist und die Funktion erfolgreich ausgeführt wird, 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 ungleich Null ist.
Bemerkungen
Bestimmte Fensterdaten werden zwischengespeichert, sodass Änderungen, die Sie mit SetWindowLongPtr vornehmen, erst wirksam werden, 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 WAHR zurückgeben. Wenn Sie andernfalls eine Funktion aufrufen, die dazu führt, dass ihre Dialogfeldprozedur eine Fenstermeldung empfängt, könnte die geschachtelte Fenstermeldung den von Ihnen festgelegten Rückgabewert mithilfe von DWLP_MSGRESULT überschreiben.
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 jedoch keine Fensterklasse unterklassen, die von einem anderen Prozess erstellt wurde. Die SetWindowLongPtr-Funktion erstellt die Fensterunterklasse, indem die Fensterprozedur geändert wird, die einer bestimmten Fensterklasse zugeordnet ist, wodurch das System die neue Fensterprozedur anstelle des vorherigen Aufrufs aufruft. Eine Anwendung muss alle Nachrichten übergeben, die nicht von der neuen Fensterprozedur an die vorherige Fensterprozedur verarbeitet werden, indem CallWindowProc aufgerufen wird. Auf diese Weise 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.
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 .
GWLP_HWNDPARENT wird verwendet, um den Besitzer eines Fensters der obersten Ebene und nicht das übergeordnete Fenster eines untergeordneten Fensters zu ändern.
Ein Fenster kann entweder über ein übergeordnetes Element oder einen Besitzer verfügen, aber nicht beide gleichzeitig.
Wenn das Fenster eine Klassenformatvorlage von CS_CLASSDC oder CS_PARENTDC aufweist, legen Sie die formatvorlagen für erweiterte Fenster nicht WS_EX_COMPOSITED oder WS_EX_LAYERED fest.
Durch Aufrufen von SetWindowLongPtr wird die Formatvorlage auf einer Statusleiste 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ä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 |
---|---|
Mindestens unterstützter Client | Windows 2000 Professional [nur Desktop-Apps] |
Mindestanforderungen für unterstützte Server | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform | Fenster |
Überschrift | winuser.h (enthalten Windows.h) |
Bibliothek | User32.lib |
DLL | User32.dll |
API-Satz | ext-ms-win-ntuser-windowclass-l1-1-0 (eingeführt in Windows 8) |
Siehe auch
Konzeptionelle
Referenz