Partager via


SetWindowLongW, fonction (winuser.h)

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

Remarque Cette fonction a été remplacée par la fonction SetWindowLongPtr. Pour écrire du code compatible avec les versions 32 bits et 64 bits de Windows, utilisez la fonction SetWindowLongPtr.
 

Syntaxe

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

Paramètres

[in] hWnd

Type : HWND

Handle vers la fenêtre et, indirectement, classe à laquelle appartient la fenêtre.

[in] nIndex

Type : int

Décalage de base zéro de la valeur à définir. Les valeurs valides sont comprises dans la plage zéro par le nombre d’octets de mémoire de fenêtre supplémentaire, moins la taille d’un entier. 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 étendue .
GWL_HINSTANCE
-6
Définit un nouveau handle d’instance d’application.
GWL_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 .
GWL_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 zéro.
GWL_WNDPROC
-4
Définit une nouvelle adresse pour la procédure de fenêtre.

Vous ne pouvez pas modifier cet attribut si la fenêtre n’appartient pas au même processus que le thread appelant.

 

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

Valeur Signification
DWL_DLGPROC
DWLP_MSGRESULT + sizeof(LRESULT)
Définit la nouvelle adresse de la procédure de boîte de dialogue.
DWL_MSGRESULT
0
Définit la valeur de retour d’un message traité dans la procédure de boîte de dialogue.
DWL_USER
DWLP_DLGPROC + sizeof(DLGPROC)
Définit de nouvelles informations supplémentaires privées pour l’application, telles que des handles ou des pointeurs.

[in] dwNewLong

Type : long

Valeur de remplacement.

Valeur de retour

Type : long

Si la fonction réussit, la valeur de retour est la valeur précédente de l’entier 32 bits spécifié.

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

Si la valeur précédente de l’entier 32 bits spécifié est égale à zéro et que la fonction réussit, la valeur de retour est égale à zéro, mais la fonction ne efface pas les dernières informations d’erreur. Cela rend difficile la détermination de la réussite ou de l’échec. Pour résoudre ce problème, vous devez effacer les dernières informations d’erreur en appelant SetLastError avec 0 avant d’appeler SetWindowLong. Ensuite, l’échec de la fonction est indiqué par une valeur de retour de zéro et un résultat GetLastError résultat différent de zéro.

Remarques

Certaines données de fenêtre sont mises en cache, de sorte que les modifications que vous apportez à l’aide de SetWindowLong ne prendront pas effet tant que vous n’appelez pas la fonction SetWindowPos. Plus précisément, si vous modifiez l’un des styles de cadre, vous devez appeler SetWindowPos avec l’indicateur de SWP_FRAMECHANGED pour que le cache soit correctement mis à jour.

Si vous utilisez SetWindowLong avec l’index GWL_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 SetWindowLong avec l’index DWL_MSGRESULT pour définir la valeur de retour d’un message traité par une procédure de boîte de dialogue, vous devez retourner TRUE directement après. Sinon, si vous appelez une fonction qui entraîne la réception d’un message de fenêtre dans votre boîte de dialogue, le message de fenêtre imbriqué peut remplacer la valeur de retour que vous avez définie à l’aide de DWL_MSGRESULT.

L’appel SetWindowLong avec l’index GWL_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 SetWindowLong 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 entraîne l’appel de la nouvelle procédure de fenêtre au lieu de la procédure précédente. Une application doit transmettre 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.

Vous ne devez pas appeler SetWindowLong avec l’index GWL_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 de CS_CLASSDC ou de CS_OWNDC, ne définissez pas les styles de fenêtre étendus WS_EX_COMPOSITED ou WS_EX_LAYERED.

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

Exemples

Pour obtenir un exemple, consultez Sous-classe d’une fenêtre.

Note

L’en-tête winuser.h définit SetWindowLong 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. Le mélange 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.

Exigences

Exigence Valeur
client minimum pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
serveur minimum pris en charge Windows 2000 Server [applications de bureau uniquement]
plateforme cible Windows
d’en-tête winuser.h (include 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

conceptuelle

GetWindowLong

de référence

RegisterClassEx

setParent

setWindowLongPtr

WNDCLASSEX

classes de fenêtre

WindowProc