Partager via


CWnd::SetWindowPos

Modifie la taille, la position, et l'ordre de plan enfants, contextuelle, et de fenêtres de niveau supérieur.

BOOL SetWindowPos( 
   const CWnd* pWndInsertAfter, 
   int x, 
   int y, 
   int cx, 
   int cy, 
   UINT nFlags  
);

Paramètres

  • pWndInsertAfter
    Identifie l'objet d' CWnd qui sont précédera (supérieur à) cet objet d' CWnd dans l'ordre de plan. Ce paramètre peut être un pointeur vers CWnd ou à Pointeur l'une des valeurs suivantes :

    • wndBottom définit la fenêtre en bas de l'ordre de plan. Si cet CWnd est une fenêtre au premier plan, la fenêtre détruit son mode le plus élevé ; le système définit la fenêtre en bas de toutes les autres fenêtres.

    • wndTop définit la fenêtre en haut de l'ordre de plan.

    • wndTopMost définit les fenêtres non le plus élevé de fenêtre surtout. La fenêtre conserve sa position située même lorsqu'il est désactivé.

    • wndNoTopMost repositionne la fenêtre en haut de toutes les fenêtres non le plus élevé (autrement dit, derrière toutes les fenêtres au premier plan). Cette balise n'a aucun effet si la fenêtre est déjà une fenêtre non le plus élevé.

    Pour les règles sur l'utilisation de ce paramètre, consultez la section « notes » de cette rubrique.

  • x
    Spécifie la nouvelle position du côté gauche de la fenêtre.

  • y
    Spécifie la nouvelle position en haut de la fenêtre.

  • cx
    Spécifie la nouvelle largeur de la fenêtre.

  • cy
    Spécifie la nouvelle hauteur de la fenêtre.

  • nFlags
    Spécifie le dimensionnement et des options de positionnement. Ce paramètre peut être une combinaison des indicateurs suivants :

    • SWP_DRAWFRAME dessine un frame (défini lorsque la fenêtre a été créée) autour de la fenêtre.

    • SWP_FRAMECHANGED envoie un message d' WM_NCCALCSIZE dans 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ée, WM_NCCALCSIZE est envoyé uniquement lorsque la taille de la fenêtre est modifiée.

    • SWP_HIDEWINDOW masque la fenêtre.

    • SWP_NOACTIVATE n'active pas la fenêtre. Si cet indicateur n'est pas définie, la fenêtre est activée et déplacée au début du groupe le plus élevé ou non le plus élevé (selon la configuration du paramètre d' pWndInsertAfter ).

    • SWP_NOCOPYBITS ignore tout le contenu de la zone cliente. Si cet indicateur n'est pas spécifiée, le contenu valide de la zone cliente est enregistré et copié dans le dans la zone cliente lorsque la fenêtre est classée ou repositionnée.

    • SWP_NOMOVE conserve la position actuelle (ignore les paramètres de x et y ).

    • SWP_NOOWNERZORDER ne modifie pas la position de la fenêtre propriétaire dans l'ordre de plan.

    • SWP_NOREDRAW ne redessine pas les modifications. Si cette balise est définie, aucun redessiner de n'importe quel type ne se produit. Cela s'applique à la zone cliente, à la zone non cliente (titre y compris et les barres de défilement), et à une partie de la fenêtre parente découverte à la suite de la fenêtre déplacée. Lorsque cette balise est définie, l'application doit explicitement invalider ou redessiner tous les éléments de la fenêtre et la fenêtre du parent qui doivent être redessinées.

    • SWP_NOREPOSITION mêmes que SWP_NOOWNERZORDER.

    • SWP_NOSENDCHANGING empêché la fenêtre de recevoir le message d' WM_WINDOWPOSCHANGING .

    • SWP_NOSIZE conserve la taille actuelle (ignore les paramètres d' cx et d' cy ).

    • SWP_NOZORDER conserve le classement de actuel (ignore pWndInsertAfter).

    • SWP_SHOWWINDOW affiche la fenêtre.

Valeur de retour

Une valeur différente de zéro si la fonction est réussie ; sinon, 0.

Notes

Les fenêtres sont classées sur l'écran en fonction de leur ordre de plan ; la fenêtre en haut de l'ordre de plan apparaît au-dessus de toutes les autres fenêtres dans l'ordre.

Toutes les coordonnées pour les fenêtres enfants sont des coordonnées clientes (par rapport à l'angle supérieur gauche de la zone cliente de la fenêtre parente). 

Une fenêtre peut être déplacée en haut de l'ordre de plan l'un ou l'autre par de définition du paramètre d' pWndInsertAfter à &wndTopMost et le vérifier que la balise d' SWP_NOZORDER n'est pas définie ou en définissant l'ordre de plan d'une fenêtre pour qu'elle soit au-dessus de toutes les fenêtres au premier plan existantes. Lorsqu'une fenêtre non le plus élevé est rendue le plus élevé, ses fenêtres détenues sont également rendues le plus élevé. Les propriétaires ne sont pas modifiés.

Une fenêtre au premier plan n'est plus le plus élevé si elle est repositionnée au bas (&wndBottom) de l'ordre de plan ou après une fenêtre non le plus élevé. Lorsqu'une fenêtre au premier plan est rendue non le plus élevé, tous les propriétaires et ses fenêtres détenues sont également apportées aux fenêtres non le plus élevé.

Si ni ni SWP_NOACTIVATESWP_NOZORDER n'est spécifié (autrement dit, lorsque les demandes d'application qu'une fenêtre soit exécuté simultanément et définies dans l'ordre de plan spécifié), la valeur spécifiée dans pWndInsertAfter est utilisée uniquement dans les circonstances suivantes :

  • Ni &wndTopMost ni &wndNoTopMost n'est spécifié dans le paramètre d' pWndInsertAfter .

  • Cette fenêtre n'est pas la fenêtre active.

Une application ne peut pas exécuter une fenêtre inactive sans l'effectuer également en haut de l'ordre de plan. Les applications peuvent modifier l'ordre de plan d'une fenêtre lancée sans restrictions.

Une fenêtre non le plus élevé peut posséder une fenêtre au premier plan, mais pas l'inverse. Toute fenêtre (par exemple, une boîte de dialogue) possédée par une fenêtre au premier plan elle-même est envoyée à une fenêtre au premier plan de vérifier que tout est détenu windows reste au-dessus de son propriétaire.

Avec les versions de Windows 3,1 et versions ultérieures, les fenêtres peuvent être déplacées vers le haut de l'ordre de plan et être verrouillées là en définissant leurs styles de WS_EX_TOPMOST . Une telle fenêtre au premier plan conserve sa position située même lorsque désactivée. Par exemple, en sélectionnant la commande toujours visible de WinHelp rend la fenêtre d'aide le plus élevé, et elle reste alors visible lorsque vous retournez à votre application.

Pour créer une fenêtre au premier plan, l'appel SetWindowPos avec le paramètre d' pWndInsertAfter égales à &wndTopMost, ou définissent le style de WS_EX_TOPMOST lorsque vous créez la fenêtre.

Si l'ordre de plan contient des fenêtres avec le style de WS_EX_TOPMOST , une fenêtre déplacée avec la valeur de &wndTopMost est définie en haut de toutes les fenêtres non le plus élevé, mais en dessous de toutes les fenêtres au premier plan. Lorsqu'une application démarre une fenêtre inactive sans bits de WS_EX_TOPMOST , la fenêtre est surtout les fenêtres non le plus élevé déplacées mais en dessous de toutes les fenêtres au premier plan.

Si SetWindowPos est appelé lorsque le paramètre d' pWndInsertAfter est &wndBottom et CWnd est une fenêtre au premier plan, la fenêtre détruit son mode le plus élevé (WS_EX_TOPMOST est supprimé), et le système définit la fenêtre en bas de l'ordre de plan.

Exemple

void CMyApp::OnHideApplication()
{
   //m_pMainWnd is the main application window, a member of CMyApp
   ASSERT_VALID(m_pMainWnd);

   // hide the application's windows before closing all the documents
   m_pMainWnd->ShowWindow(SW_HIDE);
   m_pMainWnd->ShowOwnedPopups(FALSE);

   // put the window at the bottom of z-order, so it isn't activated
   m_pMainWnd->SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0,
      SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
}

Configuration requise

Header: afxwin.h

Voir aussi

Référence

CWnd, classe

Graphique de la hiérarchie

DeferWindowPos

SetWindowPos