SetWindowPos, fonction (winuser.h)
Modifie la taille, la position et l’ordre Z d’une fenêtre enfant, contextuelle ou de niveau supérieur. Ces fenêtres sont triées en fonction de leur apparence à l’écran. La fenêtre la plus haute reçoit le rang le plus élevé et est la première fenêtre dans l’ordre Z.
Syntaxe
BOOL SetWindowPos(
[in] HWND hWnd,
[in, optional] HWND hWndInsertAfter,
[in] int X,
[in] int Y,
[in] int cx,
[in] int cy,
[in] UINT uFlags
);
Paramètres
[in] hWnd
Type : HWND
Handle de la fenêtre.
[in, optional] hWndInsertAfter
Type : HWND
Handle à la fenêtre pour faire précéder la fenêtre positionnée dans l’ordre Z. Ce paramètre doit être un handle de fenêtre ou l’une des valeurs suivantes.
Pour plus d’informations sur l’utilisation de ce paramètre, consultez la section Remarques suivante.
[in] X
Type : int
Nouvelle position du côté gauche de la fenêtre, dans les coordonnées du client.
[in] Y
Type : int
Nouvelle position du haut de la fenêtre, dans les coordonnées du client.
[in] cx
Type : int
Nouvelle largeur de la fenêtre, en pixels.
[in] cy
Type : int
Nouvelle hauteur de la fenêtre, en pixels.
[in] uFlags
Type : UINT
Indicateurs de dimensionnement et de positionnement de la fenêtre. Ce paramètre peut être une combinaison des valeurs suivantes.
Valeur | Signification |
---|---|
|
Si le thread appelant et le thread propriétaire de la fenêtre sont attachés à différentes files d’attente d’entrée, le système publie la demande sur le thread propriétaire de la fenêtre. Cela empêche le thread appelant de bloquer son exécution pendant que d’autres threads traitent la requête. |
|
Empêche la génération du message WM_SYNCPAINT . |
|
Dessine un cadre (défini dans la description de classe de la fenêtre) autour de la fenêtre. |
|
Applique les nouveaux styles d’image définis à l’aide de la fonction SetWindowLong . Envoie un message WM_NCCALCSIZE à la fenêtre, même si la taille de la fenêtre n’est pas modifiée. Si cet indicateur n’est pas spécifié, WM_NCCALCSIZE est envoyé uniquement lorsque la taille de la fenêtre est modifiée. |
|
Masque la fenêtre. |
|
N’active pas la fenêtre. Si cet indicateur n’est pas défini, la fenêtre est activée et déplacée en haut du groupe le plus élevé ou non supérieur (selon le paramètre hWndInsertAfter ). |
|
Ignore tout le contenu de la zone cliente. Si cet indicateur n’est pas spécifié, le contenu valide de la zone client est enregistré et copié dans la zone cliente une fois la fenêtre dimensionnée ou repositionnée. |
|
Conserve la position actuelle (ignore les paramètres X et Y ). |
|
Ne modifie pas la position de la fenêtre propriétaire dans l’ordre Z. |
|
Ne redessine pas les modifications. Si cet indicateur est défini, aucun repeint de quelque type que ce soit ne se produit. Cela s’applique à la zone cliente, à la zone non cliente (y compris la barre de titre et les barres de défilement) et à toute partie de la fenêtre parente découverte suite au déplacement de la fenêtre. Lorsque cet indicateur est défini, l’application doit invalider ou redessiner explicitement toutes les parties de la fenêtre et de la fenêtre parente qui doivent être redessinées. |
|
Identique à l’indicateur SWP_NOOWNERZORDER . |
|
Empêche la fenêtre de recevoir le message WM_WINDOWPOSCHANGING . |
|
Conserve la taille actuelle (ignore les paramètres cx et cy ). |
|
Conserve l’ordre Z actuel (ignore le paramètre hWndInsertAfter ). |
|
Affiche la fenêtre. |
Valeur retournée
Type : BOOL
Si la fonction réussit, la valeur de retour est différente de zéro.
Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.
Remarques
Dans le cadre de la re-architecture Vista, tous les services ont été déplacés du bureau interactif dans la session 0. Les opérations hwnd et window manager ne sont efficaces qu’à l’intérieur d’une session et les tentatives entre sessions de manipulation du hwnd échouent. Pour plus d’informations, consultez The Windows Vista Developer Story : Application Compatibility Cookbook.
Si vous avez modifié certaines données de fenêtre à l’aide de SetWindowLong, vous devez appeler SetWindowPos pour que les modifications prennent effet. Utilisez la combinaison suivante pour uFlags : SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED
.
Vous pouvez faire d’une fenêtre la plus haute en définissant le paramètre hWndInsertAfter sur HWND_TOPMOST et en veillant à ce que l’indicateur SWP_NOZORDER n’est pas défini, soit en définissant la position d’une fenêtre dans l’ordre Z afin qu’elle soit au-dessus des fenêtres les plus supérieures existantes. Lorsqu’une fenêtre non supérieure est la plus haute, les fenêtres qui lui appartiennent sont également les plus haut. Ses propriétaires, cependant, ne sont pas modifiés.
Si ni l’indicateur SWP_NOACTIVATE ni SWP_NOZORDER n’est spécifié (autrement dit, lorsque l’application demande qu’une fenêtre soit activée simultanément et que sa position dans l’ordre de Z change), la valeur spécifiée dans hWndInsertAfter est utilisée uniquement dans les circonstances suivantes.
- Ni l’indicateur HWND_TOPMOST ni HWND_NOTOPMOST n’est spécifié dans hWndInsertAfter.
- La fenêtre identifiée par hWnd n’est pas la fenêtre active.
Si une fenêtre la plus haute est repositionnée en bas (HWND_BOTTOM) de l’ordre Z ou après une fenêtre non supérieure, elle n’est plus la plus haute. Lorsqu’une fenêtre la plus haute est rendue non la plus haute, ses propriétaires et ses fenêtres propriétaires sont également faits de fenêtres non supérieures.
Une fenêtre non supérieure peut posséder une fenêtre la plus haute, mais l’inverse ne peut pas se produire. Toute fenêtre (par exemple, une boîte de dialogue) appartenant à une fenêtre la plus haute est elle-même une fenêtre la plus haute, pour garantir que toutes les fenêtres détenues restent au-dessus de leur propriétaire.
Si une application ne se trouve pas au premier plan et doit être au premier plan, elle doit appeler la fonction SetForegroundWindow .
Pour utiliser SetWindowPos pour placer une fenêtre en haut, le processus propriétaire de la fenêtre doit disposer de l’autorisation SetForegroundWindow .
Exemples
Pour obtenir un exemple, consultez Initialisation d’une boîte de dialogue.
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-window-l1-1-0 (introduit dans Windows 8) |
Voir aussi
Conceptuel
Référence