Partager via


SetWindowLongPtrW, fonction (winuser.h)

Modifie un attribut de la fenêtre spécifiée. La fonction définit également une valeur au décalage spécifié dans la mémoire de la fenêtre supplémentaire.

Note Pour écrire du code compatible avec les versions 32 bits et 64 bits de Windows, utilisez SetWindowLongPtr. Lors de la compilation pour Windows 32 bits, SetWindowLongPtr est défini comme un appel à la fonction SetWindowLong .

 

Syntaxe

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

Paramètres

[in] hWnd

Type : HWND

Handle de la fenêtre et, indirectement, de la classe à laquelle appartient la fenêtre. La fonction SetWindowLongPtr échoue si le processus qui possède la fenêtre spécifiée par le paramètre hWnd a un privilège de processus plus élevé dans la hiérarchie UIPI que le processus dans lequel réside le thread appelant.

Windows XP/2000 : La fonction SetWindowLongPtr échoue si la fenêtre spécifiée par le paramètre hWnd n’appartient pas au même processus que le thread appelant.

[in] nIndex

Type : int

Décalage de base zéro sur la valeur à définir. Les valeurs valides sont comprises entre zéro et le nombre d’octets de mémoire de fenêtre supplémentaire, moins la taille d’une LONG_PTR. Pour définir une autre valeur, spécifiez l’une des valeurs suivantes.

Valeur Signification
GWL_EXSTYLE
-20
Définit un nouveau style de fenêtre étendu.
GWLP_HINSTANCE
-6
Définit une nouvelle application instance handle.
GWLP_ID
-12
Définit un nouvel identificateur de la fenêtre enfant. La fenêtre ne peut pas être une fenêtre de niveau supérieur.
GWL_STYLE
-16
Définit un nouveau style de fenêtre.
GWLP_USERDATA
-21
Définit les données utilisateur associées à la fenêtre. Ces données sont destinées à être utilisées par l’application qui a créé la fenêtre. Sa valeur est initialement égale à zéro.
GWLP_WNDPROC
-4
Définit une nouvelle adresse pour la procédure de fenêtre.
 

Les valeurs suivantes sont également disponibles lorsque le paramètre hWnd identifie une boîte de dialogue.

Valeur Signification
DWLP_DLGPROC
DWLP_MSGRESULT + sizeof(LRESULT)
Définit le nouveau pointeur vers la procédure de boîte de dialogue.
DWLP_MSGRESULT
0
Définit la valeur de retour d’un message traité dans la procédure de boîte de dialogue.
DWLP_USER
DWLP_DLGPROC + sizeof(DLGPROC)
Définit de nouvelles informations supplémentaires qui sont privées à l’application, telles que les handles ou les pointeurs.

[in] dwNewLong

Type : LONG_PTR

Valeur de remplacement.

Valeur retournée

Type : LONG_PTR

Si la fonction réussit, la valeur de retour est la valeur précédente du décalage spécifié.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Si la valeur précédente est zéro et que la fonction réussit, la valeur de retour est zéro, mais la fonction n’efface pas les dernières informations d’erreur. Pour déterminer la réussite ou l’échec, effacez les dernières informations d’erreur en appelant SetLastError avec 0, puis en appelant SetWindowLongPtr. L’échec de la fonction est indiqué par une valeur de retour de zéro et un résultat GetLastError différent de zéro.

Remarques

Certaines données de fenêtre étant mises en cache, les modifications que vous apportez à l’aide de SetWindowLongPtr ne prendront pas effet tant que vous n’appelez pas la fonction SetWindowPos .

Si vous utilisez SetWindowLongPtr avec l’index GWLP_WNDPROC pour remplacer la procédure de fenêtre, la procédure de fenêtre doit être conforme aux instructions spécifiées dans la description de la fonction de rappel WindowProc .

Si vous utilisez SetWindowLongPtr avec l’index DWLP_MSGRESULT pour définir la valeur de retour d’un message traité par une procédure de boîte de dialogue, la procédure de boîte de dialogue doit retourner TRUE immédiatement après. Sinon, si vous appelez une fonction qui entraîne la réception d’un message de fenêtre par votre procédure de boîte de dialogue, le message de fenêtre imbriquée peut remplacer la valeur de retour que vous avez définie à l’aide de DWLP_MSGRESULT.

L’appel de SetWindowLongPtr avec l’index GWLP_WNDPROC crée une sous-classe de la classe de fenêtre utilisée pour créer la fenêtre. Une application peut sous-classer une classe système, mais ne doit pas sous-classer une classe de fenêtre créée par un autre processus. La fonction SetWindowLongPtr crée la sous-classe de fenêtre en modifiant la procédure de fenêtre associée à une classe de fenêtre particulière, ce qui amène le système à appeler la nouvelle procédure de fenêtre au lieu de la précédente. Une application doit passer tous les messages non traités par la nouvelle procédure de fenêtre à la procédure de fenêtre précédente en appelant CallWindowProc. Cela permet à l’application de créer une chaîne de procédures de fenêtre.

Réservez une mémoire de fenêtre supplémentaire en spécifiant une valeur différente de zéro dans le membre cbWndExtra de la structure WNDCLASSEX utilisée avec la fonction RegisterClassEx .

N’appelez pas SetWindowLongPtr avec l’index GWLP_HWNDPARENT pour modifier le parent d’une fenêtre enfant. Utilisez plutôt la fonction SetParent .

Si la fenêtre a un style de classe CS_CLASSDC ou CS_PARENTDC, ne définissez pas les styles de fenêtre étendus WS_EX_COMPOSITED ou WS_EX_LAYERED.

L’appel de SetWindowLongPtr pour définir le style sur une barre de progression réinitialise sa position.

Notes

L’en-tête winuser.h définit SetWindowLongPtr comme alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête winuser.h (inclure Windows.h)
Bibliothèque User32.lib
DLL User32.dll
Ensemble d’API ext-ms-win-ntuser-windowclass-l1-1-0 (introduit dans Windows 8)

Voir aussi

CallWindowProc

Conceptuel

GetWindowLongPtr

Référence

RegisterClassEx

SetParent

WNDCLASSEX

classes de fenêtre

WindowProc